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 后备实施是强制性的吗?的主要内容,如果未能解决你的问题,请参考以下文章