使用 Reactor Mono 记录重试
Logging retries with Reactor Mono
我正在使用 Reactive Streams 调用 Web 服务,并配置了自动重试策略,以便在初始调用失败时进行多次重试。我希望能够记录每次重试,但无法在 the documentation 中找到执行此操作的方法。 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"));
好的,我找到了一种方法,将 Reactor Extra Utilities 包添加到我的项目中。这使我可以将上面示例中的 retryBackoff
方法替换为以下内容:
.retryWhen(Retry.any()
.retryMax(RETRIES)
.exponentialBackoff(MIN_BACKOFF_DURATION, MAX_BACKOFF_DURATION)
.doOnRetry(context -> LOGGER.warn("retry")))
从 Reactor Core, Version 3.3.4 开始,您可以使用大修后的 retryWhen
模型;喜欢:
[...]
.retryWhen(Retry.backoff(5, Duration.ofSeconds(2))
.doBeforeRetry(retrySignal -> {
log.error("Retrying: "
+ retrySignal.totalRetries() + "; "
+ retrySignal.totalRetriesInARow() + "; "
+ retrySignal.failure());
}));
我正在使用 Reactive Streams 调用 Web 服务,并配置了自动重试策略,以便在初始调用失败时进行多次重试。我希望能够记录每次重试,但无法在 the documentation 中找到执行此操作的方法。 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"));
好的,我找到了一种方法,将 Reactor Extra Utilities 包添加到我的项目中。这使我可以将上面示例中的 retryBackoff
方法替换为以下内容:
.retryWhen(Retry.any()
.retryMax(RETRIES)
.exponentialBackoff(MIN_BACKOFF_DURATION, MAX_BACKOFF_DURATION)
.doOnRetry(context -> LOGGER.warn("retry")))
从 Reactor Core, Version 3.3.4 开始,您可以使用大修后的 retryWhen
模型;喜欢:
[...]
.retryWhen(Retry.backoff(5, Duration.ofSeconds(2))
.doBeforeRetry(retrySignal -> {
log.error("Retrying: "
+ retrySignal.totalRetries() + "; "
+ retrySignal.totalRetriesInARow() + "; "
+ retrySignal.failure());
}));