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从2000ms降低到1ms,甚至尝试向该方法引入Thread.sleep调用,以验证它所花费的时间长于持续时间阈值。该方法运行大约100次(编辑:当slidingWindowSizeminimumNumberOfCalls设置远低于这个数字时,问题仍然发生)。

但是我的断路器没有打开,大约100次调用这个方法后。正如我所看到的,如果超过50%的调用花费超过1ms,它应该打开。我错过什么了吗?

这是因为该方法是私有的。方法必须是公共的,这样才能被代理。

最新更新