Gur*_*rma 6 circuit-breaker spring-boot resilience4j
我是断路器的新手,最近在我的一项服务中实现了它们。我正在浏览Resilience 4J 官方文档,发现我们可以为断路器配置两个属性。
上述两个属性都指定必须对服务进行的调用次数,以确定断路器是否应保持打开状态或应关闭状态。我需要了解这两个属性之间的细微差别以及它们之间可能存在的任何关系?它们应该相互独立配置还是两者之间应该存在关系?
另外,以上两者之间是否有关系permittedNumberOfCallsInHalfOpenState。例如,如果我配置permittedNumberOfCallsInHalfOpenState为 5,但我的slidingWindowSize/minimumNumberOfCalls配置为 10,那么如何重新验证断路器状态?因为它至少需要 10 个请求才能重新评估断路器的新状态,但当它处于打开状态时我们只允许 5 个请求?
jum*_*key 12
Resilience4j之父的这个回答对我有帮助:
在生产系统中,您不应将minimumNumberOfCalls 设置为1。对于测试来说,它是可以的,但3 更好。
假设您有minimumNumberOfCalls=3、slidingWindowSize = 10 和slidingWindowType = COUNT_BASED:这意味着一旦记录了3 个呼叫,CircuitBreaker 就会根据最近10 个呼叫计算失败率和慢速呼叫率。
假设 2 个调用较慢,1 个调用较快:这意味着慢速调用率高于 50%,CircuitBreaker 将转换为 OPEN。
如果 slipWindowType = TIME_BASED 并且失败率是根据过去 N 秒的调用计算的,则 minusNumberOfCalls 设置更有意义。
至于permittedNumberOfCallsInHalfOpenState问题,wait-duration-in-open-state期限结束后,将进入max-wait-duration-in-half-open-state最多允许 5 次调用的状态。只要未达到/超过阈值,电路就会闭合。它不依赖于此处的slidingWindowSize/ 。minimumNumberOfCalls
当 CircuitBreaker 处于 OPEN 状态时,它会拒绝调用并抛出 CallNotPermissionException。等待时间过去后,CircuitBreaker 状态从 OPEN 更改为 HALF_OPEN,并允许可配置数量的调用来查看后端是否仍然不可用或已再次可用。进一步的调用将被拒绝,并出现 CallNotPermissionException,直到所有允许的调用都已完成。如果失败率或慢速呼叫率等于或大于配置的阈值,状态将更改回 OPEN。如果失败率和慢调用率低于阈值,则状态更改回 CLOSED。
PS 如果您没有配置任何属性,则按照此处使用默认值。
| 归档时间: |
|
| 查看次数: |
9062 次 |
| 最近记录: |