我对断路器是新手,最近在我的一项服务中实现了。我正在浏览文档复原力4J正式文件,并找到了两个我们可以为断路器配置的属性。
上述两个属性都指定了必须向服务发出的呼叫次数,以确定断路器应该保持打开还是应该关闭。我需要理解这两种属性之间的细微区别,以及它们之间可能存在的任何关系?它们是否应该被配置,而不考虑彼此,或者两者之间应该存在某种关系?
另外,上述两者与permittedNumberOfCallsInHalfOpenState之间是否存在某种关系。例如,如果我将permittedNumberOfCallsInHalfOpenState配置为5,但我的slidingWindowSize/minimumNumberOfCalls配置为10,那么如何重新验证断路器状态?因为它需要至少10个请求才能重新评估断路器的新状态,但是当它处于开放状态时,我们只允许5个请求?
发布于 2022-03-07 04:47:18
这个答案来自Resilience4j的父亲帮助我:
在生产系统中,您不应该将minimumNumberOfCalls设置为1。对于测试来说,它是可以的,但是3更好。 假设您有minimumNumberOfCalls=3,slidingWindowSize = 10和slidingWindowType = COUNT_BASED:这意味着CircuitBreaker正在根据最后10个调用计算失效率和慢调用率,只要记录了3个调用。 假设两个呼叫是慢的,一个呼叫是快速的:这意味着慢呼叫率超过50%,并且CircuitBreaker将转换为打开。 如果minimumNumberOfCalls = TIME_BASED和故障率是基于最后N秒钟的调用计算的,那么这个设置就更有意义了。
至于permittedNumberOfCallsInHalfOpenState问题,在wait-duration-in-open-state周期结束后,它进入max-wait-duration-in-half-open-state,最多允许5次调用。只要没有达到/超过阈值,电路就会关闭。它不依赖于slidingWindowSize/minimumNumberOfCalls (按这里 )。
CircuitBreaker在CallNotPermittedException打开时拒绝使用它的调用。在等待时间过去之后,CircuitBreaker状态从OPEN变为HALF_OPEN,并允许可配置的调用数来查看后端是否仍然不可用或是否再次可用。使用CallNotPermittedException拒绝进一步的呼叫,直到所有允许的呼叫都完成为止。如果故障率或慢调用率随后等于或大于配置的阈值,则状态将更改为打开。如果故障率和慢呼叫率低于阈值,则状态更改为关闭状态。
如果不配置任何属性,则默认值按这里使用。
https://stackoverflow.com/questions/71098633
复制相似问题