Непонятное аварийное поведение - PullRequest
1 голос
/ 11 марта 2020

Я хочу использовать запасной вариант в случае сбоя, поэтому поведение в «открытом» состоянии должно состоять в том, чтобы вызывать запасной вариант вместо выдачи исключения.

Проблема в том, что вызывается запасной вариант во время «закрытого» состояния , в то время как для «открытого» состояния я все еще получаю исключение. Это предполагаемое поведение? Нет способа добиться того, что я ищу?

Я определил свой пользовательский разрыв цепи:

resilience4j:
  circuitbreaker:
 configs:
  default:
    register-health-indicator: true
    slidingWindowSize: 10
    minimumNumberOfCalls: 2
    permittedNumberOfCallsInHalfOpenState: 2
    automaticTransitionFromOpenToHalfOpenEnabled: true
    waitDurationInOpenState: 20s
    failureRateThreshold: 20
    slowCallDurationThreshold: 2s
    slowCallRateThreshold: 20
instances:
  backendA:
    base-config: default

Теперь я определил свой метод следующим образом:

public class ExampleService {


@CircuitBreaker(name = "default", fallbackMethod = "fall")
public List<String> doSomething(Long id) {
    return Arrays.asList("a", "b", "c");

}

private List<String> fall(Long id, Exception ex) {
    return Arrays.asList("faaaallingggg");
}
 }

1 Ответ

1 голос
/ 13 марта 2020

Просто измените свою подпись резервного метода на

private List<String> fall(Long id, CallNotPermittedException ex) {
    return Arrays.asList("faaaallingggg");
}
...