考虑到一种情况:服务消费端既有Hystrix的全局/特定服务降级方法,又有@FeignClient
修饰的接口所实现的降级服务类。异常以被零除为例:
-
1.如果消费端有异常,服务端随意,消费端实现降级服务类,同时消费端控制方法有
@HystrixCommand
,执行@HystrixCommand的降级方法 -
2.如果消费端有异常,服务端随意,消费端实现降级服务类,消费端控制方法无
@HystrixCommand
,那么页面会报 Whitelabel Error Page java.lang.ArithmeticException: / by zero -
3.如果消费端无异常,服务端有异常,消费端实现降级服务类,消费端控制方法无
@HystrixCommand
,执行降级服务类中对应的降级方法(理所当然) -
4.如果消费端无异常,服务端有异常,消费端实现降级服务类,同时消费端控制方法有
@HystrixCommand
,执行降级服务类中对应的降级方法
总结:
- 1.从4可以看出,服务端方法有异常时,降级服务类优先于
@HystrixCommand
。[最常见状况] - 2.从1/2可以看出。消费端方法本身有异常,降级服务类无法服务降级,但 其方法上的
@HystrixCommand
可以服务降级。 - 3.对于带有
@DefaultProperties
的控制类,具有独有降级服务的方法@HystrixCommand(fallbackMethod = "xxx")
, 优先于 全局的降级服务方法@HystrixCommand