概述
Hystrix HystrixCollapser 合并 请求
在微服务中,微服务多次调用会影响性能,就有可能需要进行请求合并
引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.2.10.RELEASE</version>
</dependency>
MergeService
@Service
public class MergeService {
@Autowired
private RestTemplate restTemplate;
/**
* 只需要返回 future null 就行
* @param a
* @return
*/
@HystrixCollapser(batchMethod = "batch", scope = com.netflix.hystrix.HystrixCollapser.Scope.GLOBAL,
collapserProperties = {
//需要设置得少,避免拉长每个请求的响应
@HystrixProperty(name = "timerDelayInMilliseconds", value = "500"),
//在批处理中允许的最大请求数
@HystrixProperty(name = "maxRequestsInBatch", value = "200"),
}
)
public Future<String> get(Long a) {
return null;
}
@HystrixCommand
public List<String> batch(List<Long> input) {
System.out.println("merge request size: " + input.size() + " param:" + input);
String ids = input.stream().map(a -> a.toString()).collect(Collectors.joining(","));
List<String> result = restTemplate.getForObject("http://localhost:5556/users?ids=" + ids, List.class);
return result;
}
}
根据id 批量查询
@RestController
public class UserController {
@GetMapping("/users")
public List<String> user(String ids) {
return Arrays.stream(ids.split(",")).map(a -> "hello"+a).collect(Collectors.toList());
}
}
测试用例:
@RequestMapping("/merge2")
public String merge2(String p) throws Exception {
System.out.println(">>>>>>>>>> request : " + p);
Future<String> stringFuture = mergeService.get(Long.valueOf(p));
return stringFuture.get();
}
结果:
>>>>>>>>>> request : 112291865
>>>>>>>>>> request : 11691058140
>>>>>>>>>> request : 11630894985
>>>>>>>>>> request : 150157055
>>>>>>>>>> request : 1424867276
>>>>>>>>>> request : 11302501285
>>>>>>>>>> request : 1595670558
>>>>>>>>>> request : 1190321130
>>>>>>>>>> request : 12068028753
>>>>>>>>>> request : 11272675858
merge request size: 10 param:[112291865, 11691058140, 11272675858, 1424867276, 11630894985, 12068028753, 11302501285, 150157055, 1190321130, 1595670558]
**可以发现请求已经被合并,注意 HystrixCollapser 支持服务间调用 如 RestTemplate,好像在Controller层不不起作用 **
最后
以上就是神勇芝麻为你收集整理的Hystrix HystrixCollapser 合并 请求的全部内容,希望文章能够帮你解决Hystrix HystrixCollapser 合并 请求所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复