服务降级
降级配置
复制代码
1
2@HystrixCommand
8001先从自身找问题
设置自身调用超时时间的峰值,峰值内可以正常运行,超过了需要有兜底的方法处理,做服务降级
8001fallback
业务类启用
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22/** * 超时访问,演示降级 * @param id * @return */ @HystrixCommand(fallbackMethod = "paymentInfo_TimeOutHandler", commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000") }) public String paymentInfo_TimeOut(Integer id){ //int age = 10/0; int timeNumber = 5; try { TimeUnit.SECONDS.sleep(timeNumber); } catch (InterruptedException e) { e.printStackTrace(); } return "线程池: " + Thread.currentThread().getName() + " paymentInfo_TimeOut" + id + "t" + "haha~~" + "耗时(秒)" + timeNumber + "降级"; } public String paymentInfo_TimeOutHandler(Integer id){ return "线程池: " + Thread.currentThread().getName() + " 系统繁忙或者运行报错,请稍后再试id: " + id + "t" + "my god"; }
@HystrixCommand报异常后如何处理
一旦调用服务方法失败并抛出错误信息后,会自动调用@HystrixCommand
标注好的fallbackMethod 调用类中的指定方法
主动类激活
添加@EnableCircuitBreaker
注解
80fallback
80订单微服务,可更好的保护自己,进行客户端降级
题外话,我们自己配置过的热部署方式对java代码改动明显,但对@HystrixCommand
内属性的修改建议重启微服务
YML
复制代码
1
2
3
4
5
6
7
8
9
10
11
12server: port: 80 eureka: client: fetch-registry: false service-url: defaultZone: http://eureka7001.com:7001/eureka #服务降级 feign: hystrix: enabled: true
主启动
添加@EnableHystrix
业务类
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15@GetMapping("/consumer/payment/hystrix/timeout/{id}") @HystrixCommand(fallbackMethod = "PaymentTimeOutFallbackMethod",commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "1500") }) //@HystrixCommand public String paymentInfo_TimeOut(@PathVariable("id") Integer id){ //int age = 10/0; String result = paymentHystrixService.paymentInfo_TimeOut(id); return result; } public String PaymentTimeOutFallbackMethod(@PathVariable("id") Integer id) { return "我是消费者80,对方支付系统繁忙请10秒钟后再试或者自己运行出错请检查自己,o(╥﹏╥)o"; }
目前问题
- 每个业务方法对应一个兜底方法,代码膨胀
- 统一和自定义分开
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33@RestController @Slf4j @DefaultProperties(defaultFallback = "payment_Global_FallbackMethod") public class OrderHystrixController { @Resource private PaymentHystrixService paymentHystrixService; @GetMapping("/consumer/payment/hystrix/ok/{id}") public String paymentInfo_OK(@PathVariable("id") Integer id){ String result = paymentHystrixService.paymentInfo_OK(id); return result; } @GetMapping("/consumer/payment/hystrix/timeout/{id}") // @HystrixCommand(fallbackMethod = "PaymentTimeOutFallbackMethod",commandProperties = { // @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "1500") // }) @HystrixCommand public String paymentInfo_TimeOut(@PathVariable("id") Integer id){ //int age = 10/0; String result = paymentHystrixService.paymentInfo_TimeOut(id); return result; } public String PaymentTimeOutFallbackMethod(@PathVariable("id") Integer id) { return "我是消费者80,对方支付系统繁忙请10秒钟后再试或者自己运行出错请检查自己,o(╥﹏╥)o"; } //下面是全局fallback方法 public String payment_Global_FallbackMethod(){ return "Global异常处理信息,请稍后再试~~"; } }
服务降级,客户端去调用服务端,碰上服务端宕机或关闭
本次案例是在客户端80实现完成的,与服务端8001没有关系,只需要为Feign客户端定义的接口添加一个服务降级处理的实现类即可实现解耦。
未来面对的异常
- 运行
- 超时
- 宕机
根据cloud-consumer-feign-hystrix-order80已有PaymentHystrixService接口,重新新建一个类(PaymentFallbackService)实现该接口,统一为接口里的方法进行异常处理
PaymentFallbackService
复制代码
1
2
3
4
5
6
7
8
9
10
11
12@Component public class PaymentFallbackService implements PaymentHystrixService{ @Override public String paymentInfo_OK(Integer id) { return "******PaymentFallbackService fall back-paymentInfo_OK,~~~~"; } @Override public String paymentInfo_TimeOut(Integer id) { return "******PaymentFallbackService fall back-paymentInfo_TimeOut,~~~~"; } }
PaymentHystrixService
复制代码
1
2
3
4
5
6
7
8@Component @FeignClient(value = "CLOUD-PROVIDER-HYSTRIX-PAYMENT", fallback = PaymentFallbackService.class) public interface PaymentHystrixService { @GetMapping("/payment/hystrix/ok/{id}") public String paymentInfo_OK(@PathVariable("id") Integer id); @GetMapping("/payment/hystrix/timeout/{id}") public String paymentInfo_TimeOut(@PathVariable("id") Integer id);
最后
以上就是阔达心锁最近收集整理的关于Hystrix断路器之FallBack服务降级的全部内容,更多相关Hystrix断路器之FallBack服务降级内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复