resilience4j Spring Boot 2 - PullRequest
       36

resilience4j Spring Boot 2

0 голосов
/ 07 мая 2020

Пробуем простой проект Spring Boot 2 + Resilience4j .

Но сталкиваемся с проблемой, что выключатель всегда ЗАКРЫТ хотя хост-приложение не работает.

Класс обслуживания

@Autowired
private RestTemplate restTemplate;

@Bean
public RestTemplate restTemplate() {
    return new RestTemplate();
}

@CircuitBreaker(name = "mainService", fallbackMethod="testFallBack")
public ResponseEntity<String> invokeService(int i) {
    return restTemplate.exchange(
            "http://localhost:9092/", // This service is always down
            HttpMethod.GET,
            null,
            String.class
    );
}

private  ResponseEntity<String> testFallBack(int i, Exception e) {
    return new ResponseEntity<String>("In fallback method", HttpStatus.INTERNAL_SERVER_ERROR);
}

Конфигурация Resilience4J

management.endpoint.health.show-details: always
management.health.circuitbreakers.enabled: true

resilience4j:
  circuitbreaker:
    configs:
      default:
        registerHealthIndicator: true
        minimumNumberOfCalls: 5
        permittedNumberOfCallsInHalfOpenState: 3
        automaticTransitionFromOpenToHalfOpenEnabled: true
        waitDurationInOpenState: 5s
        failureRateThreshold: 50
        eventConsumerBufferSize: 10
    instances:
      mainService:
        baseConfig: default

Служба вызывается несколько раз из контроллера, и я ожидаю, что это откат после минимум 5 вызовов, но выключатель всегда ЗАКРЫТ и для каждого вызова от контроллера вызывается и запускается служба хоста с отказом в соединении.

Зависимости: spring-boot-starter-web, resilience4j-spring-boot2, spring-aop, spring-boot-starter-actator

Ранее я опробовал программный подход c с использованием функции CircuitBreakerRegistry и Decorator который работает как ожидалось.

1 Ответ

0 голосов
/ 12 июня 2020

Попробуйте изменить исключение на CallNotPermittedException в резервном методе.

...