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

断路器在半开状态下的性能如何(弹性4J)

公羊渝
2023-03-14

有时我会看到CallNotPermittedException,并显示一条消息,表明断路器处于半开状态。但我不明白它在那种状态下是怎么工作的。我已经在一个模拟服务器上写了一个测试,其中我已授权NumberOfCallsInHalfOpenState=2,然后我排队等待3个延迟(3秒)的调用,然后调用,下一个调用将失败,并显示CallNotPermitedException和HALF_OPEN消息。但是,如果我等待3秒钟(足以让通话结束),然后我进行下一次通话,CB现在处于关闭状态。从半开放到另一个州的过渡如何?要等一段时间吗?或者只是“半开放状态下的许可数量”来完成?那为什么我要打3个电话而不是2个?

我用的是1.5版

共有1个答案

滕弘新
2023-03-14

断路器打开时,会拒绝带有CallNotPermittedException的呼叫。等待时间过后,断路器状态从打开变为半开,并允许可配置的呼叫次数,以查看后端是否仍然不可用或是否再次可用。使用CallNotPermittedException拒绝进一步的呼叫,直到所有允许的呼叫完成。如果故障率或慢速呼叫率等于或大于配置的阈值,则状态变回打开。如果故障率和慢速呼叫率低于阈值,则状态变回关闭状态。

这意味着,如果在半开放状态下有3个并发调用,则允许两个,拒绝一个。

但是,如果在执行第三次呼叫之前两次呼叫成功,断路器将转换为闭合状态,并允许第三次呼叫。

 类似资料:
  • 我可以看到,我可以使用以下代码以编程方式将状态设置为强制打开:CircuitBreaker强制打开状态 但是有没有一种方法可以设置一个属性,在应用程序启动时立即将状态设置为此,以便可以与测试一起使用呢?

  • 根据入门指南(https://Resilience4j.readme.io/docs/get-started-3)和演示项目(https://github.com/Resilience4j/Resilience4j-spring-boot2-demo),我想自己测试它,创建一个更简单的测试应用程序。 代码如下:

  • 我有一个关于带Resilience4J(不仅仅是Resilience4J)的Spring Cloud断路器的快速问题。 这两个项目都非常棒。然而,目前,我们经常以撤退告终。这意味着,当第三方服务真的很好时,我们最终还是会选择后退。 这可能是我自己的问题,因此,我想问一个特定配置的问题。 我想告诉当前配置做以下操作:断路器。(我将使用好的,坏的,和一半好/一半坏的状态。 > 当状态是一半好/一半坏:

  • 我想用Resilience4j来处理容错,我用的是断路器和定时器限制。 我想分离业务逻辑的容错行为,不要“弄脏”我的业务代码。 2-我如何有这个应用程序的许多实例,断路器为每个实例单独工作?我是对的?

  • 我正面临使用Spring Cloud Resilience 4j的断路器实现的问题。 在一些教程之后,我尝试在项目中添加必要的依赖项。此外,尝试添加配置,但电路仍然没有打开,并且没有调用回退方法。 对于用例,我正在从我的服务调用外部 API,如果该外部 API 关闭,那么在几次调用后,我需要启用断路器。 请从不同的文件中找到代码片段。 我是断路器模式的新手。我们将非常感谢您的帮助。 pom.xml

  • 断路器将处于闭合或半断开状态无限时间,直到达到最小的呼叫次数,对吗?有什么办法我可以设置什么时候没有调用在数量的时间,它将转为关闭状态?另外,在半开状态下,是否有可能使最小呼叫数大于允许的呼叫数?谢谢。