Hystrix:HystrixCollapser请求合并


声明:本文转载自https://my.oschina.net/giegie/blog/1582474,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

偶尔在spring4all,看到DiDi关于hystrix请求合并的一篇文章 Spring Cloud Hystrix的请求合并,查阅资料又整理了一下。

具体业务概念,什么是请求合并?请求合并优缺点?可以参考DiDi的文章,然后我把我使用过程中的问题及解决方法写出来

代码

合并请求服务实现

 @HystrixCollapser(batchMethod = "testAll", collapserProperties = {         @HystrixProperty(name = "timerDelayInMilliseconds", value = "3000") }) public Future<Demo> test(String param) {     return null; }  @HystrixCommand public List<Demo> testAll(List<String> params) {     logger.info("合并操作线程 --> {} --> params --> {}", Thread.currentThread().getName(), params);     return restTemplate.getForObject("http://DEMO-SERVICE/demo?params={1}", List.class, StringUtils.join(params, ","));; } 

对外请求接口定义:

 @RequestMapping("/test") public SysDict test() throws ExecutionException, InterruptedException {     //开启上下文TheardLocal     HystrixRequestContext context = HystrixRequestContext.initializeContext();     Future<Demo> demo1 = testService.test(RandomUtil.randomNumbers(5));     Future<Demo> demo2 = testService.test(RandomUtil.randomNumbers(5));     System.out.println(demo1.get());     System.out.println(demo2.get());     context.close();     return null; } 

效果如下:

image

  • 如图两次调用Service.test()被合并成一次服务调用。

如果我请求两次接口也就是会调用四次Service.test(),那么会合并成几次服务调用呢?

image

  • 如图,两次请求还是被合并成了两次服务调用。

怎么实现两次请求,合并成一次服务调用?

@HystrixCollapser scope属性 //所有线程的请求中的多次服务请求进行合并。 Scope.GLOBAL; //默认,对一次请求的多次服务调用合并 Scope.REQUEST;  

改造后代码:

 @HystrixCollapser(batchMethod = "testAll", scope = Scope.GLOBAL, collapserProperties = {     @HystrixProperty(name = "timerDelayInMilliseconds", value = "3000") }) public Future<Demo> test(String param) {     return null; } 

改造后效果:

image

总结

  1. 这里单个请求的service 返回的 Future 包装的对象,如果使用原对象,则是同步请求,不会合并。
  2. HystrixRequestContext 接口访问需要开启上下文对象,其实就是使用TheardLoacl 初始化一个上下文对象。
  3. 暂时还不支持 feign 整合
  4. @HystrixCollapser Scope.REQUEST Scope.GLOBAL 合并作用域的区别

本文发表于2017年12月01日 10:33
(c)注:本文转载自https://my.oschina.net/giegie/blog/1582474,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 3143 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1