偶尔在spring4all,看到DiDi关于hystrix请求合并的一篇文章 Spring Cloud Hystrix的请求合并,查阅资料又整理了一下。spring
具体业务概念,什么是请求合并?请求合并优缺点?能够参考DiDi的文章,而后我把我使用过程当中的问题及解决方法写出来bash
@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 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;
}
复制代码
@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;
}
复制代码