Сгенерировать исключение после достижения максимальных попыток в 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);
Другие вопросы по тегам