1

从理解上看,Hystrix fallback 逻辑是在请求超时、线程池以 100% 容量运行或依赖抛出异常等特定条件发生时触发的。除了这 3 个因素之外,我是否可以添加更多也被视为失败的条件,例如任何特定的 HTTP 错误代码,如 413(有效负载太大)?

4

1 回答 1

3

Hystrix的fallback方法会在以下情况下被调用

  • 电路开路
  • 信号量/线程池拒绝
  • 执行失败(您的方法抛出的任何异常,不包括 HystrixBadRequestException)
  • 您的方法超时(hystrix 超时)

只有与用户代码直接相关的部分是执行失败。

在这种情况下,方法抛出的任何异常都会触发回退run()。通过 HystrixCommand 和 Hystrix Javanica 通过注解的纯 Hystrix 是相同的。

只有一个异常不会触发HystrixBadRequestException

因此,如果您还想为 HTTP 413 状态代码触发回退,您所要做的就是在您的方法中抛出任何异常。

如果您正在使用任何具有内置 Hystrix 支持的库,例如 Spring Cloud Feign,您需要实现该库所需的一些东西。对于 Spring Cloud Feign,您可以实现自己的ErrorDecoder. 默认错误解码器将触发所有 4XX、5XX 错误的回退。如果您不想触发除 413 之外的任何后备 4XX 错误,则可以将其扔进HystrixBadRequestException去。

于 2017-12-04T05:54:04.903 回答