Автоматический выключатель Spring Cloud: Притворяйтесь, что автоматический выключатель не разомкнут

#java #spring-cloud #feign #circuit-breaker #resilience4j

#Ява #весеннее облако #притворяться #автоматический выключатель #отказоустойчивость 4j

Вопрос:

Автоматический выключатель работает, вызывается запасной вариант, но автоматический выключатель не изменяет свое состояние и каждый раз отправляет запрос на отказавшую службу. Попробовал ту же конфигурацию YAML с шаблоном rest — работает правильно.

Притвориться клиентом

 @FeignClient(  name = MyFeignClient.SERVICE_NAME,  url = "https://httpbin.org/",  configuration = {FeignClientConfiguration.class}) public interface MyFeignClient {  String SERVICE_NAME = "producer-service";   @GetMapping(value = "/status/502")  ResponseEntitylt;Stringgt; gerRequest(); }  

Резервный класс

 public class MyFallback implements MyFeignClient {  private final Exception cause;   public MyFallback(Exception cause) {  this.cause = cause;  }   public ResponseEntitylt;Stringgt; gerRequest() {  if (cause instanceof HttpServerErrorException){  return ResponseEntity.of(Optional.of(cause.getMessage()));  } else {  return ResponseEntity.of(Optional.of(cause.getMessage()));  }  } }  

Имитация конфигурации клиента

 @RequiredArgsConstructor public class FeignClientConfiguration {  private final CircuitBreakerRegistry registry;   @Bean  @Scope("prototype")  public Feign.Builder feignBuilder() {  CircuitBreaker circuitBreaker = registry.circuitBreaker("producer-service");  FeignDecorators decorators = FeignDecorators.builder()  .withCircuitBreaker(circuitBreaker)  .withFallbackFactory(MyFallback::new)  .build();  return Resilience4jFeign.builder(decorators);  } }  

Конфигурация автоматического выключателя YAML

 resilience4j.circuitbreaker:  configs:  default:  registerHealthIndicator: true  slidingWindowType: COUNT_BASED  slidingWindowSize: 5  minimumNumberOfCalls: 3  permittedNumberOfCallsInHalfOpenState: 1  automaticTransitionFromOpenToHalfOpenEnabled: true  waitDurationInOpenState: 5s  failureRateThreshold: 50  eventConsumerBufferSize: 10  writableStackTraceEnabled: true  recordExceptions:  - org.springframework.web.client.HttpServerErrorException  - java.util.concurrent.TimeoutException  - java.io.IOException  shared:  slidingWindowSize: 100  permittedNumberOfCallsInHalfOpenState: 30  waitDurationInOpenState: 1s  failureRateThreshold: 50  eventConsumerBufferSize: 10  instances:  producer-service:  baseConfig: default