Java 使用Reactor Mono重试日志记录

Java 使用Reactor Mono重试日志记录,java,spring-webflux,project-reactor,Java,Spring Webflux,Project Reactor,我使用反应流调用web服务,并配置了一个自动重试策略,以便在初始调用失败时尝试多次重试。我希望能够记录每次重试,但在中找不到这样做的方法。Mono对象具有用于各种事件(如成功、失败等)的doOn…方法,但我看不到doOnRetry。有人能建议一种方法吗?我的代码如下所示: return webClient.get() .uri(myUrl) .retrieve() .bodyToMono(byte[].class) .retryBackoff(RETRIES, M

我使用反应流调用web服务,并配置了一个自动重试策略,以便在初始调用失败时尝试多次重试。我希望能够记录每次重试,但在中找不到这样做的方法。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"));
返回webClient.get()
.uri(myUrl)
.retrieve()
.BodyToNo(字节[].class)
.retryBackoff(重试次数、最小后退持续时间、最大后退持续时间)
.doOnSubscribe(订阅->LOGGER.info(“订阅”))
.doOnSuccess(结果->LOGGER.info(“成功”))
//.doOnRetry(something->LOGGER.info(“重试”))LOGGER.info(“错误”);

好的,我找到了一种方法,将包添加到我的项目中。这允许我用以下内容替换上例中的
retryBackoff
方法:

.retryWhen(Retry.any()
    .retryMax(RETRIES)
    .exponentialBackoff(MIN_BACKOFF_DURATION, MAX_BACKOFF_DURATION)
    .doOnRetry(context -> LOGGER.warn("retry")))
首先,您可以使用经过大修的
retryWhen
型号;比如:

[...]
.retryWhen(Retry.backoff(5, Duration.ofSeconds(2))
        .doBeforeRetry(retrySignal -> {
            log.error("Retrying: "
                    + retrySignal.totalRetries() + "; "
                    + retrySignal.totalRetriesInARow() + "; "
                    + retrySignal.failure());
        }));