Hystrix 后备实施是强制性的吗?

Posted

技术标签:

【中文标题】Hystrix 后备实施是强制性的吗?【英文标题】:Is Hystrix fallback implementation mandatory? 【发布时间】:2020-08-07 23:27:37 【问题描述】:

我有一个方法调用第三方资源来检索 Dog 对象。如果调用失败,我没有返回 Dog 对象的替代路径。

那么,这里的首选方法是什么:- 1、实现hystrix fallback,返回一个空Dog对象。 2、Hystrix调用失败时会抛出异常,捕获异常后返回空Dog对象。

选项 1 还是 2? hystrix 回退是强制性的实施要求吗?您真的没有回退方法吗? 我觉得不是,你怎么看? hystrix 指南有什么建议?

【问题讨论】:

【参考方案1】:

根据您的说法,选项 1 和 2 的结果相同 - 返回一个空 Dog。我会说在这种情况下使用后备处理它会更好,因为它更干净。回退将被定义为命令的一部分,因此在该命令的所有使用中都是一致的。如果您将其作为例外处理,则情况并非如此。在这种情况下,您需要记住在进行调用的所有地方都实现异常处理......并且以相同的方式 - 忘记处理某个地方很容易出错。

是否必须进行后备? 这不是强制性的。如果未提供,将引发异常。 在您的情况下,您确实有一个后备策略 - 它非常简单。它实际上在 Hystrix Wiki 中作为 Silent Fail 进行了介绍,您可以在 https://github.com/Netflix/Hystrix/wiki/How-To-Use#Common-Patterns-FailSilent 上阅读更多信息

值得考虑哪些操作需要回退,或者更确切地说,回退应该是什么。值得为读取操作提供后备。对于写入操作,这可能不是一个好主意,如下所述:https://github.com/Netflix/Hystrix/wiki/How-To-Use#Fallback。

定义后备策略是模式的一部分。想象一个使用 Hystrix 的开发人员很少的项目。知道去哪里查看后备策略会感觉很好。这是一个巨大的好处。

要记住的一点是,处理异常的成本更高,因此将它们用作后备策略会浪费资源。这在请求数量较少的小型项目中不会成为问题,但可能会导致处理大量此类调用的系统出现问题。

【讨论】:

以上是关于Hystrix 后备实施是强制性的吗?的主要内容,如果未能解决你的问题,请参考以下文章

方法参数不匹配的 Spring Hystrix 单一后备

Hystrix Javanica 后备在 Spring Cloud 1.0 中不起作用

如何处理Zuul中的hystrix后备?

Hystrix 构建高可用微服务

Hystrix 超时配置的N种玩法

Hystrix 超时配置的N种玩法