Java API体系结构中断路器设计模式的优势是什么?

Java API体系结构中断路器设计模式的优势是什么?,java,spring,api,hystrix,circuit-breaker,Java,Spring,Api,Hystrix,Circuit Breaker,很抱歉,如果这个问题不适合这样做 但我试着寻找答案 我在研究断路器设计模式,因为我知道它用于使您具有API容错能力。现在我弄糊涂的是 假设我有一个调用支付API的API,并且假设我将我的电路配置为在5个调用连续失败时打开 现在根据断路器的设计,我将在断开电路后将后续呼叫路由到回退方法。假设接下来的5次调用,在第6次调用中,我将调用支付API,若API在线,我将关闭电路 但我并没有发现这种模式的任何优势,比如说挡块和断路器之间的区别 我们可以用回退法做什么?这有什么帮助 此设计模式的目标是封装用于

很抱歉,如果这个问题不适合这样做

但我试着寻找答案

我在研究断路器设计模式,因为我知道它用于使您具有API容错能力。现在我弄糊涂的是

假设我有一个调用支付API的API,并且假设我将我的电路配置为在5个调用连续失败时打开

现在根据断路器的设计,我将在断开电路后将后续呼叫路由到回退方法。假设接下来的5次调用,在第6次调用中,我将调用支付API,若API在线,我将关闭电路

但我并没有发现这种模式的任何优势,比如说挡块和断路器之间的区别


我们可以用回退法做什么?这有什么帮助

此设计模式的目标是封装用于处理意外重复错误的逻辑

for this模式有一些有用的部分,解释了您希望实现此逻辑以避免发出预期会失败的请求的情况类型

这种模式的优点是什么

当您知道某个服务将不可用,并且在该服务恢复联机之前希望自定义行为时,此模式非常有利。例如,在数据库迁移期间,在迁移完成之前将请求循环到队列中是有意义的

挡块和断路器之间的区别是什么

我认为这种差异就是概念和实施之间的差异。检测您想要“打开电路”的情况可能意味着检测catch块中的错误并对其进行计数,如您的示例所示。然而,处理不仅仅限于错误


在我的示例中,后端可能会通知前端即将进行迁移,导致前端出现“断路”,直到它收到迁移完成的消息。

确实,大量使用断路器可以使API具有容错性

比如说,挡块和断路器的区别是什么

锁扣和断路器之间的主要区别在于故障情况的处理。 假设我们正在调用外部系统的api。 比方说,api调用失败了

  • 如果我们使用catch块,我们将捕获异常并调用回退方法。 下次我们将调用相同的api,而外部系统仍处于关闭状态。所以同样的事件循环也会发生。 这将不必要地轰炸外部系统,消耗系统资源,并增加api响应时间

  • 如果我们使用断路器模式,那么我们的第一次呼叫失败,然后我们打开电路。下次我们甚至不会调用外部系统,而是直接遵循回退模式。瞧,一切都搞定了

  • 我们可以用回退法做什么?这有什么帮助

    回退方法的一个好例子如下。 我们有一个支付系统,将支付路由到不同的支付网关。 假设我们从一个特定的支付网关得到一个错误,那么在回退方法中,我们可以将它路由到不同的支付网关


    您也可以阅读本文以了解更多有关此主题的信息:

    我们的同事已经展示了断路器的优点,因此我将集中介绍一些实际示例

    因此,看看您的示例,您有一个必须调用支付API的流>让我们假设它是一个“外部”组件。如果没有这个调用,整个流程可能无法被视为“成功完成”(我知道您有一些在线流程,其中支付是其基本步骤之一)

    在这种情况下,断路器实际上可能没有那么大的用处,除非您将支付命令存储在某种中间存储器中,然后“重新应用”支付逻辑

    断路器的全部要点是提供合理的回退,以便在应用回退逻辑时不会认为流量失败

    这是另一个断路器更有意义的例子

    如果您构建了一个“类似netflix”的门户,并且在UI中有一个显示“推荐”电影的小部件。推荐引擎会考虑您以前看过/喜欢的电影。从技术上讲,这是一个“外部系统”/“微服务”

    现在,如果为UI填充数据的流无法获得建议(例如,如果建议服务关闭),您会使整个流“失败”吗? 可能不会,也许最好显示一些推荐电影的“通用列表”,并让用户继续使用该应用程序

    在这种情况下,断路器可以是实现调用外部推荐服务的良好选择

    现在,这个流和异常处理之间有什么区别

    如果该推荐系统出现故障的原因是某些临时网络中断/数据库缓慢,那么最好给该服务一段时间,而不是反复尝试调用它,我们应该给它一个“恢复”的机会。 当我们应用断路器时,在“断路”期间,我们的代码甚至不会尝试调用服务器,直接路由到回退方法

    另一方面,常规的try/catch块将始终调用推荐服务


    总之,断路器是问题中所述的容错模式;它是一种工具,在某些情况下适用,在其他情况下则不适用。

    解释得很好@mark。我理解在考虑断路器时,您的回退是多么重要。我了解它的策略模式,在消息队列的帮助下,我们在系统中处理这个问题。但你的例子很有力