Повторные попытки регистрации с Reactor Mono - PullRequest
0 голосов
/ 20 сентября 2019

Я использую Reactive Streams для вызова веб-службы и настроил политику автоматической повторной попытки, чтобы в случае сбоя при первоначальном вызове было предпринято несколько попыток.Я хотел бы иметь возможность регистрировать каждую попытку, но не могу найти способ сделать это в документации .У объекта Mono есть doOn... методы для различных событий, таких как успех, сбой и т. Д., Но я не вижу doOnRetry.Кто-нибудь может предложить способ сделать это?Мой код выглядит примерно так:

return webClient.get()
    .uri(myUrl)
    .retrieve()
    .bodyToMono(byte[].class)
    .retryBackoff(RETRIES, MIN_BACKOFF_DURATION, MAX_BACKOFF_DURATION)
    .doOnSubscribe(subscription -> LOGGER.info("subscribe"))
    .doOnSuccess(result -> LOGGER.info("success"))
    //.doOnRetry(something -> LOGGER.info("retry")) <-- I want to do this
    .doOnError(err -> LOGGER.info("error"));

1 Ответ

0 голосов
/ 20 сентября 2019

Хорошо, я нашел способ сделать это, добавив пакет Reactor Extra Utilities в мой проект.Это позволило мне заменить метод retryBackoff в приведенном выше примере следующим:

.retryWhen(Retry.any()
    .retryMax(RETRIES)
    .exponentialBackoff(MIN_BACKOFF_DURATION, MAX_BACKOFF_DURATION)
    .doOnRetry(context -> LOGGER.warn("retry")))
...