使用spring reactive WebClient,我使用了一个API,如果响应状态为500,我需要使用指数回退重试。但在Mono类中,我没有看到任何使用Predicate作为输入参数的retryBackoff。
这就是我要找的功能:
public final Mono<T> retryBackoff(Predicate<? super Throwable> retryMatcher, long numRetries, Duration firstBackoff)
现在,我的实现如下(我没有带回退机制的重试):
client.sendRequest()
.retry(e -> ((RestClientException) e).getStatus() == 500)
.subscribe();
5条答案
按热度按时间46scxncf1#
您可能需要查看reactor-addons项目中的
reactor-extra
模块。在Maven中,您可以执行以下操作:然后像这样使用它:
vh0rcniy2#
Retry.onlyIf
现在已过时/删除。如果有人对最新的解决方案感兴趣:
值得一提的是,
retryWhen
将源异常 Package 到RetryExhaustedException
中。如果您想“恢复”源异常,可以使用reactor.core.Exceptions
实用程序:mzsu5hc03#
我不确定,您使用的是哪种 Spring 版本,在2.1.4中我有这样的:
......所以这就是你想要的,对吗?
flmtquvp4#
我目前正在尝试使用Kotlin协同程序+ Spring WebFlux:
以下内容似乎不起作用:
u7up0aaq5#
我们将记录源发出错误的时间并对它们进行计数。
我们将指数回退重试配置为最多尝试3次且无抖动。
我们还记录重试发生的时间和重试次数(从0开始)。
默认情况下,会抛出Exceptions.retryExhausted异常,最后一次失败()作为原因。这里我们将其定制为直接将原因作为onError发出。