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