当前位置: 首页 > 知识库问答 >
问题:

断路器设计模式在API架构中的优势是什么?

沈博达
2023-03-14

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

假设我有调用支付API的API,假设我将电路配置为如果连续5次调用失败就打开。

现在按照断路器的设计,我将路由断开电路后的后续调用回落方法。让我们说下5个电话,在第6个电话,我会打电话到支付API,如果API是在线的,我会关闭电路。

但是我没有发现这种模式的任何优点,比如捕捉块和断路器之间的区别。

在回落法中我们能做些什么?这有什么帮助?

共有1个答案

唐利
2023-03-14

我们的同事已经展示了断路器的优点,所以我将集中讨论实际的例子。

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

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

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

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

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

现在,这个流和异常处理有什么不同?

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

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

因此,总而言之,断路器是一种容错模式,正如问题中所述;它是一种工具,在某些情况下可以适用,在其他情况下不相关。

 类似资料:
  • 设计模式算是在面向对象中比较有趣的东西,特别是对于像我,这样的用得不是很多的。虽然有时候也会用上,但是并不知道用的是怎样的模式。之前学习了 一段时间的设计模式,实际上也就是将平常经常用到的一些东西进行了总结,如此而已。学习设计模式的另外一个重要的意义在于,我们使用了设计模式的时候我们 会知道自己使用了,并且还会知道用了是怎样的设计模式。 至于设计模式这个东西和有些东西一样,是发现的而不是发明的,换

  • 回退方法和实际方法应该返回相同的返回类型。 我应该怎么做才能从回退方法返回字符串,并从实际方法返回一些对象?

  • 本文向大家介绍AJAX的优势是什么?相关面试题,主要包含被问及AJAX的优势是什么?时的应答技巧和注意事项,需要的朋友参考一下 ajax是异步传输技术,可以通过javascript实现,也可以通过JQuery框架实现,实现局部刷新,减轻了服务器的压力,也提高了用户体验。

  • 在我的项目中,我有一个小数据结构<code>Key</code>。 是的,这个类很简单,每个字段都可以公开访问。 但是有人建议我使用POJO风格的课程,但当我问为什么他们无法告诉我时。 在我看来,调用 getter 和 setters 比直接进入一个领域要慢。 那么为什么我必须使用POJO编程风格呢?

  • 本文向大家介绍javascript设计模式Constructor(构造器)模式,包括了javascript设计模式Constructor(构造器)模式的使用技巧和注意事项,需要的朋友参考一下 Constructor是一种在内存已分配给该对象的情况下,用于初始化新创建对象的特殊方法。Object构造器用于创建特定类型的对象–准备好对象以备使用,同事接收构造器可以使用参数,以在第一次创建对象时,设置成

  • 问题内容: 用最简单的术语来说,这使我感到困惑。假装您几乎在向母亲或某人解释。 问题答案: 工厂创建一个对象。所以,如果你想建立 每次创建对象时,您都不必依赖执行以下代码 那就是工厂的所在地。我们定义了一个工厂来为我们照顾: 现在我们要做的就是 真正的优势在于您想更改班级。可以说我们想传入另一个ClassC: 或新的ClassB: 现在,我们可以使用继承来轻松修改类的创建方式,以放置不同的类集。