1

我正在尝试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 状态。

无法理解这种行为。寻求帮助。

4

2 回答 2

1

这是因为默认值为minimumNumberOfCalls100。

只有记录了最少的调用次数,才能计算失败率和慢速调用率。例如,如果需要调用的最小数量为 10,则必须至少记录 10 个调用,然后才能计算失败率。如果仅评估了 9 个呼叫,即使所有 9 个呼叫都失败,CircuitBreaker 也不会跳闸。

您可以将其设置为 50。

于 2020-04-27T10:18:37.850 回答
0

删除 failureRateThreshold 作为测试,我的假设是它正在考虑 failureRateThreshold 和 slowCallRateThreshold 之间的总和才能生效

于 2020-04-22T15:22:49.857 回答