首页 > 解决方案 > 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 状态。

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

标签: javaspringfeigncircuit-breakerresilience4j

解决方案


这是因为默认值为minimumNumberOfCalls100。

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

您可以将其设置为 50。


推荐阅读