Hystrix降级和熔断可以是不同的方法吗?

新手上路,请多包涵

有一个外部服务调用,正常情况返回A, 偶尔超时的时候返回降级结果B,大量超时时返回熔断结果C,问题是B和C可以不一样吗?我看hystrix的教程,降级和熔断返回的都是fallback方法的结果,有没有大佬知道如何实现B和C不同,感谢大佬指点

阅读 1.5k
1 个回答

熔断和降级是两个不太相关的概念,我理解你如果这个需求属于客户端的基于超时次数进行多次降级,还不涉及到熔断的话。
一种比较简单的方式是可以通过异常来实现,自定义一个偶尔超时的异常和大量超时的异常,然后在fallback降级方法中,获得这个异常,然后返回不同的方式。

@HystrixCommand(fallbackMethod = "fallback")
String something(String params) {
   if("偶尔超时") throw new RuntimeException("偶尔超时");
   if("大量超时") throw new RuntimeException("大量超时");
    // logic
}

String fallback(String params, Throwable throwable) {
    if(throwable = "偶尔超时") do B;
    if(throwable = "大量超时") do C;
} 

如果是需要混和降级和熔断的,即一定程度时候降级(返回某个值,可快速恢复),严重的时候熔断(返回某个值,某个时间段内不再调用),那可能需要把降级和熔断定义在不同的主体上来实现,例如服务端熔断+客户端降级,方法降级+全局熔断。
另一个点是,关于偶尔超时和大量超时,这个判断,稍微有点模糊,如果是超时计数的话,那可能还有挺多要考虑的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题