RestTemplate+Hystrix
2021/12/19 23:28:20
本文主要是介绍RestTemplate+Hystrix,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
项目中调用第三方采购的项目,采用的是restTemplate,但这样无法做线程隔离。
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.http.*; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; import java.util.Map; /** * @author duanxz * 2019年6月1日 下午3:41:34 */ @Component public class RestTemplateHystrixCombination { private Logger logger = LoggerFactory.getLogger(RestTemplateHystrixCombination.class); @Resource @Qualifier("getRestTemplate2") RestTemplate restTemplate; /** * * @param url * @param name * @return */ @HystrixCommand(groupKey="CrmGroup", commandKey = "getTest", commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000"),//指定多久超时,单位毫秒。超时进fallback @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),//判断熔断的最少请求数,默认是10;只有在一个统计窗口内处理的请求数量达到这个阈值,才会进行熔断与否的判断 @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "10"),//判断熔断的阈值,默认值50,表示在一个统计窗口内有50%的请求处理失败,会触发熔断 }, threadPoolProperties = { @HystrixProperty(name = "coreSize", value = "1"), @HystrixProperty(name = "maximumSize", value = "1"), @HystrixProperty(name = "maxQueueSize", value = "0"), @HystrixProperty(name = "keepAliveTimeMinutes", value = "2"), @HystrixProperty(name = "queueSizeRejectionThreshold", value = "15"), @HystrixProperty(name = "metrics.rollingStats.numBuckets", value = "12"), @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "1440")}) public Object getTest(String url, String name) { Object origResult = restTemplate.getForEntity(url, String.class); return origResult; } }
groupKey和commandKey都是自定义的,取一下能代表业务含义的就好。
timeoutInMilliseconds、coreSize和maximumSize是我要的
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/restTemplate") public class RestTemplateHystrixCombinationController { @Autowired RestTemplateHystrixCombination restService; @GetMapping("/test") public Object testabc(){ return restService.getTest("http://172.29.163.90:8088/uniteApi/riskService/riskService/sync", "duanxz"); } }
这篇关于RestTemplate+Hystrix的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API
- 2025-01-102025 蛇年,J 人直播带货内容审核团队必备的办公软件有哪 6 款?
- 2025-01-10高效运营背后的支柱:文档管理优化指南
- 2025-01-10年末压力山大?试试优化你的文档管理
- 2025-01-10跨部门协作中的进度追踪重要性解析
- 2025-01-10总结 JavaScript 中的变体函数调用方式
- 2025-01-10HR团队如何通过数据驱动提升管理效率?6个策略
- 2025-01-10WBS实战指南:如何一步步构建高效项目管理框架?