Hystrix 请求合并

请求是一个链式请求的过程 假如说在一个环节当中有一个链条断裂了,他的上一个链条就请求不到,为了防止这种情况产生就出来了熔断器,

Ribbon

在这里插入图片描述
@HystriCommand指明了为这个方法添加熔断器 如果服务出了问题那么就调用指定的方法来返回

feign

它自带熔断器 但是默认是关闭的需在yml配置文件中打开
在这里插入图片描述
只需要在Controller上面增加一个注解说明并且实现一个熔断的实现类就行了 在实现类的具体方法里面写上熔断之后产生的消息

很多时候很多用户会请求相同的资源 比如user表
然后后台就可以进行一个请求合并 把请求的userID放进一个list里面 发一次请求 到user服务去请求回来一个user列表 再返回客户端 这样避免了多次请求减小了并发量

当然请求合并能能够设置多少时间段内的请求才合并成为一个请求去请求其他模块

首先在user的model中写一个controller

    @RequestMapping("/getUserAll")
    public List<String> getAllUSer(@RequestParam List<Integer> ids) {
        ArrayList<String> list = new ArrayList<>();
        for (Integer id : ids) {
            list.add("用户:" + id);
        }
        return list;
    }

然后是order 的model的controller

    @RequestMapping("/findTest")
    public String findTest() throws ExecutionException, InterruptedException {
        /**
         *即使是调用一次也会被合并
         */
        HystrixRequestContext context = HystrixRequestContext.initializeContext();
        调用的是findone方法 但是他会转化成findall方法
        Future<String> f1 = orderService.findOne(1);
        Future<String> f2 = orderService.findOne(2);
        Future<String> f3 = orderService.findOne(3);
        Future<String> f4 = orderService.findOne(4);
//        context.close();
        return f1.get()+"\t"+f2.get()+"\t"+f3.get()+"\t"+f4.get();
    }

service

 /**
     * Hystrix   请求合并
     */
    @HystrixCommand   //设置能被找到
    public List<String> findAll(List<Integer> id) {
        System.out.println("合并的请求");
        System.out.println("\n\n\n\n\n"+StringUtils.join(id, ',')+"\n\n\n\n\n");
        String url = "http://yidiankt-user/getUserAll?ids={1}";
        List info2 = restTemplate.getForObject(url,List.class,StringUtils.join(id, ','));
        /**
         *  StringUtils.join(id , ',')   把list转化成数组
         */
        return info2;
    }

    /**
     * @return
     * @HystrixCollapser(batchMethod = "findAll")     说明需要被合并的方法是这个    合并方法是findall
     * <p>
     * <p>
     * collapserProperties = {
     * @HystrixProperty(name = "timeDelayInMilliseconds",value = "300")
     * }
     * <p>
     * 这个 是指明多少时间内的请求都合并为一个请求     value = 300 表示300毫秒以内的请求都合并
     */
    @HystrixCollapser(batchMethod = "findAll", collapserProperties = {
            @HystrixProperty(name = "timerDelayInMilliseconds", value = "300")
    })
    public Future<String> findOne(Integer id) {
        System.out.println("被合并的请求");
        return null;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值