ums_hystrix增加hystrix服务降级(针对接口配置) 作者:马育民 • 2021-07-04 20:01 • 阅读:10115 # 说明 由于 全局配置的缺点,这里介绍 针对接口单独配置 备选方法 兼容 全局配置,不会发生冲突。如果有全局配置,那么 针对接口配置的 备选方法 **优先级高** # 修改pom.xml 增加下面依赖: ``` org.springframework.cloud spring-cloud-starter-netflix-hystrix ``` # 修改 application.yml 开启 hystrix: ``` feign: hystrix: enabled: true ``` # 修改主启动类 增加下面注解: ``` @EnableHystrix ``` ### 完整代码 如下 ``` @SpringBootApplication @EnableFeignClients @EnableHystrix public class UmsHystrixMain { public static void main(String[] args) { SpringApplication.run(UmsHystrixMain.class,args); } } ``` # 修改 FollowController类 当 接口 响应超时、报错,就会触发 服务降级,调用 **备选方法**(fallback) ### 给接口增加注解 由于 `getNotice()` 方法 需要调用 **服务提供者** 的接口,所以 `getNotice()` 接口 需要服务降级,防止因为 **服务提供者** 的接口慢而拖死 增加下面注解: ``` @HystrixCommand(fallbackMethod = "fallback",commandProperties = { @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value = "1500")}) ``` **解释:** 超过1500毫秒无响应时,那么就 调用 `fallback()` 方法 **注意:** 这里使用 `fallbackMethod` 属性,所以 `fallback()` 方法的参数 **必须** 与 `getNotice()` 方法 **参数相同**,否则报错 ### 增加 fallback() 方法 ``` public JsonResult fallback(String id){ logger.info("fallback2==id:"+id); return new JsonResult(100,"hystrix降级!"); } ``` **注意:** 1. **fallback方法** 返回值 必须与 **熔断方法** 相同(如果有泛型,泛型也要相同) 2. **fallback方法** 参数列表 必须与 **熔断方法** 相同 3. 尽量把熔断添加再最外层的方法中 # 测试超时 启动服务 访问 http://localhost:8081/getNotice/195c6547e5044c759dc39caf317998c5 `getNotice` 接口需要调用 notice 工程的 `getNoticeById` 接口,而 `getNoticeById` 接口休眠 3 秒中,也就是说 `getNotice` 接口也需要等待 3 秒,带 通过 `@HystrixCommand` 注解的配置,当超过 1.5秒 没有响应时,就会调用 `fallback()` 方法 访问结果如下: ``` { "code": 100, "msg": "hystrix降级(全局)!" } ``` # 测试报错 ### 修改 getNotice() 方法 修改 `getNotice()` 方法,在首行增加下面代码: ``` int i=1/0; ``` 完整代码如下: ``` public JsonResult getNotice(@PathVariable("id") String id){ int i=1/0; logger.info("id="+id); return noticeClient.getNoticeById(id); } ``` ### 访问测试 访问 http://localhost:8081/getNotice/195c6547e5044c759dc39caf317998c5 在控制台中没有打印异常信息,访问结果如下: ``` { "code": 100, "msg": "hystrix降级(全局)!" } ``` 原文出处:http://malaoshi.top/show_1IX1Ql1MmLqE.html