在 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种情况