java - Resilience4J 断路器配置无法正常工作
问题描述
我正在尝试Circuitbreaker
使用自定义构建 Resilience4JCircuitbreakerConfig
使用以下代码构建CircuitbreakerConfig
CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig
.custom()
.slidingWindowSize(100)
.failureRateThreshold(50)
.slowCallRateThreshold(50)
.slowCallDurationThreshold(
Duration.ofMillis(1000))
.waitDurationInOpenState(
Duration.ofMillis(1000))
.recordExceptions(IOException.class,
FeignException.FeignServerException.ServiceUnavailable.class)
.ignoreExceptions(
FeignException.FeignServerException.InternalServerError.class)
.build();
CircuitBreaker circuitBreaker = CircuitBreaker.of("sample-cb", circuitBreakerConfig);
我正在使用它来进行 HTTP 调用。响应总是需要超过 1000 毫秒。理想情况下,如果前 100 个调用很慢,如果 50 个,CircuitBreaker 应该转换到 OPEN 状态。但它仅在 100 次调用后才转换为 OPEN 状态。
无法理解这种行为。寻求帮助。
解决方案
这是因为默认值为minimumNumberOfCalls
100。
只有记录了最少的调用次数,才能计算失败率和慢速调用率。例如,如果需要调用的最小数量为 10,则必须至少记录 10 个调用,然后才能计算失败率。如果仅评估了 9 个呼叫,即使所有 9 个呼叫都失败,CircuitBreaker 也不会跳闸。
您可以将其设置为 50。
推荐阅读
- javascript - 按下文本链接后不显示弹出窗口的内容
- visual-studio-2017 - Nuget 解决方案级替代方案
- node.js - Firebase 云功能;无法访问 Firestore 数据库
- logstash - Grok 解析器:如何解析日志消息
- typescript - Typescript 泛型:如何同时引用类定义和实例类型
- python - 将表格保存在数据库中
- python - 为什么执行 form.is_valid() 会导致删除不在 django 表单中的实例字段?
- php - 如何将这三个 php 提要合并为一个提要
- django - 如何在 Django 中只用一个查询来查询 2 个不同的表?
- r - 查找和计算符合条件的连续观测值