我是靠谱客的博主 神勇芝麻,最近开发中收集的这篇文章主要介绍Hystrix HystrixCollapser 合并 请求,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 合并 请求所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部