Автоматический выключатель resilience4j записывает исключения для родительского класса исключений - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть конфигурация resilience4j.circuitbreaker.instances.bookService.record-exceptions=com.sk.example.cb.circuitbreakerr4j.AbcException AbcException - это исключение, расширенное с java .lang.RuntimeException. Когда возникает исключение java .lang.RuntimeException, размыкается автоматический выключатель bookService. Похоже, это ошибка.


    @Service
    @Slf4j
    public class BookApiService {
      RestTemplate restTemplate = new RestTemplate();
      @CircuitBreaker(name = "bookService", fallbackMethod = "getBookFallback")
      public String getBook(){
        try {
          ResponseEntity<String> stringResponseEntity = restTemplate.getForEntity(new URI("http://localhost:8080/book"), String.class);
          if(null != stringResponseEntity){
            if(stringResponseEntity.getStatusCode().is2xxSuccessful()){
              return stringResponseEntity.getBody();
            }
          }
        } catch (URISyntaxException e) {
          e.printStackTrace();
        }catch (HttpServerErrorException e){
          log.error("Service unavailable",e);
          if(e.getMessage().startsWith("503")) {
            log.info("503");
            throw new RuntimeException();
          }else{
            log.info("something");
            //throw e;
          }
        }
        return "";
      }

      public String getBookFallback(Throwable e) throws Throwable {
        log.warn("fall back", e);
        throw e;
        //throw new RuntimeException(e);
        //return "default books";
      }

    }
...