пружинная повторная попытка с экспоненциальным откатом условно - PullRequest
0 голосов
/ 05 апреля 2019

Используя пружинный реактивный WebClient, я использую API, и в случае ответа со статусом 500 мне нужно повторить попытку с экспоненциальным откатом. Но в классе Mono я не вижу retryBackoff с предикатом в качестве входного параметра.

Это функция, которую я ищу:

public final Mono<T> retryBackoff(Predicate<? super Throwable> retryMatcher, long numRetries, Duration firstBackoff)

Сейчас моя реализация выглядит следующим образом (у меня нет повторных попыток с механизмом backOff):

client.sendRequest()
    .retry(e -> ((RestClientException) e).getStatus() == 500)
    .subscribe();

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Возможно, вы захотите взглянуть на модуль reactor-extra в проекте реактор-аддоны .В Maven вы можете сделать:

<dependency>
    <groupId>io.projectreactor.addons</groupId>
    <artifactId>reactor-extra</artifactId>
    <version>3.2.3.RELEASE</version>
</dependency>

И затем использовать это так:

client.post()
    .syncBody("test")
    .retrieve()
    .bodyToMono(String.class)
    .retryWhen(Retry.onlyIf(ctx -> ctx.exception() instanceof RestClientException)
                    .exponentialBackoff(firstBackoff, maxBackoff)
                    .retryMax(maxRetries))
0 голосов
/ 10 мая 2019

Я не уверен, какую весеннюю версию вы используете, в 2.1.4 у меня так:

client.post()
    .syncBody("test")
    .retrieve()
    .bodyToMono(String.class)
    .retryBackoff(numretries, firstBackoff, maxBackoff, jitterFactor);

... так это именно то, что вы хотите, верно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...