У меня есть конфигурация 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";
}
}