如何解决达到slowCallRateThreshold 时,Resilience4j 断路器没有打开?
我用 Resilience4j CircuitBreaker 修饰了以下方法:
@CircuitBreaker(name = "getSwaggerFileName")
private Optional<String> getSwaggerFileName(String url) {
return Optional.ofNullable(restTemplate.getForObject(url,SwaggerQueryResponse.class))
.flatMap(SwaggerQueryResponse::getFileName);
}
我的断路器配置存储在 application.yaml 中:
resilience4j:
circuitbreaker:
configs:
default:
slowCallRateThreshold: 50
slowCallDurationThreshold: 1
slidingWindowSize: 20
waitDurationInopenState: 60000
instances:
getSwaggerFileName:
baseConfig: default
肯定会找到此文件,并且类似的设置可以与 @RateLimiter
注释配合使用。我已将 slowCallDurationThreshold
从 2000 毫秒降低到 1 毫秒,甚至尝试向该方法引入 Thread.sleep
调用以验证它花费的时间超过持续时间阈值。该方法运行了大约 100 次(编辑:当 slidingWindowSize
和 minimumNumberOfCalls
的设置远低于此数字时,问题仍然存在)。
但是我的断路器在调用了大约 100 次这个方法后没有打开。在我看来,如果超过 50% 的调用时间超过 1 毫秒,它应该会打开。我错过了什么吗?
解决方法
这是因为该方法是私有的。该方法必须是公共的,以便它可以被代理。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。