Сгенерировать исключение после достижения максимальных попыток в resilience4j-retry
Как я могу выдать исключение при достижении максимального количества повторных попыток. В моем случае, когда Response
имеет другой код, чем 200, я хотел бы бросить исключение.
Retry retry = RetryRegistry.of(
RetryConfig.<Response> custom()
.retryOnResult({ it.statusCode() != 200 })
.build())
.retry("my-retry")
Response response = Retry.decorateSupplier(retry, { foo.bar() }).get()
1 ответ
Решение
Вы можете обернуть свой код и выдать исключение, когда HTTP-код не равен 200.
Например, в коде Java:
Supplier<Response> supplier= () -> foo.bar();
Supplier<String> supplierWithResultHandling = SupplierUtils.andThen(supplier, result -> {
if (result.statusCode().is4xxClientError()) {
throw new HttpClientErrorException(result.statusCode());
} else if (result.statusCode().is5xxServerError()) {
throw new HttpServerErrorException(result.statusCode());
}
return result;
});
Response response = retry.executeSupplier(supplierWithResultHandling);