Resilience4J Конфигурации выключателя не работают должным образом - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь построить Resilience4J Circuitbreaker, используя пользовательский CircuitbreakerConfig

Используя следующий код для сборки 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 миллисекунд, чтобы ответить. В идеале CircuitBreaker должен переходить в состояние ОТКРЫТО, если 50, если первые 100 вызовов медленные. Но он переходит в состояние ОТКРЫТО только после 100 вызовов.

Не в состоянии понять это поведение. Нужна помощь.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Это потому, что значение по умолчанию minimumNumberOfCalls равно 100.

Частота отказов и низкая скорость вызовов может быть рассчитана только в том случае, если записано минимальное количество вызовов. Например, если минимальное количество требуемых вызовов составляет 10, то необходимо рассчитать не менее 10 вызовов, прежде чем можно будет рассчитать частоту отказов. Если было оценено только 9 вызовов, CircuitBreaker не отключится, даже если все 9 вызовов не пройдены.

Вы можете установить его на 50.

0 голосов
/ 22 апреля 2020

Удалите faultRateThreshold в качестве теста, я предполагаю, что он рассматривает сумму между faultRateThreshold и slowCallRateThreshold для вступления в силу

...