在 Hystrix 中触发回退的自定义错误条件

Posted

技术标签:

【中文标题】在 Hystrix 中触发回退的自定义错误条件【英文标题】:Custom error conditions to trigger fallback in Hystrix 【发布时间】:2018-05-16 20:55:36 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

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

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

只有一个异常不会触发HystrixBadRequestException

因此,如果您还想为 HTTP 413 状态代码触发回退,您只需在方法中抛出任何异常即可。

如果您正在使用任何具有内置 Hystrix 支持的库,例如 Spring Cloud Feign,您需要实现该库所需的东西。如果是 Spring Cloud Feign,你可以实现自己的ErrorDecoder。默认错误解码器将触发所有 4XX、5XX 错误的回退。如果不想触发除 413 之外的任何回退 4XX 错误,可以在其中抛出 HystrixBadRequestException

【讨论】:

以上是关于在 Hystrix 中触发回退的自定义错误条件的主要内容,如果未能解决你的问题,请参考以下文章

服务治理-Hystrix触发fallback降级逻辑的5种情况

如何说 Hystrix 不会为 Hystrix 命令中的某些异常触发回退

Hystrix 回退方法返回 null

聊聊Hystrix

如何正确处理 Hystrix 回退中的预期错误?

Spring Cloud(Dalston.SR5)--Zuul 网关-Hystrix 回退