当前位置: 首页 > 知识库问答 >
问题:

spring WebClient:针对特定错误重试并进行退避

丌官昊天
2023-03-14

当响应为5xx时,我想在等待10秒后重试请求3次。但我看不到一个我能用的方法。在对象上

WebClient.builder()
                .baseUrl("...").build().post()
                .retrieve().bodyToMono(...)

吾见方法:

在有重试计数但无延迟的条件下重试

.retry(3, {it is WebClientResponseException && it.statusCode.is5xxServerError} )

有退避和次数但没有条件的重试

.retryBackoff 

还有一个RetryWhen,但我不确定如何使用它

共有1个答案

东方夕
2023-03-14

使用Reactor-Extrace,您可以这样做:

.retryWhen(Retry.onlyIf(this::is5xxServerError)
        .fixedBackoff(Duration.ofSeconds(10))
        .retryMax(3))

private boolean is5xxServerError(RetryContext<Object> retryContext) {
    return retryContext.exception() instanceof WebClientResponseException &&
            ((WebClientResponseException) retryContext.exception()).getStatusCode().is5xxServerError();
}

更新:使用新的API,相同的解决方案将是:

    .retryWhen(Retry.fixedDelay(3, Duration.ofSeconds(10))
            .filter(this::is5xxServerError));

//...

private boolean is5xxServerError(Throwable throwable) {
    return throwable instanceof WebClientResponseException &&
            ((WebClientResponseException) throwable).getStatusCode().is5xxServerError();
}
 类似资料:
  • 问题内容: 我正在尝试将静态库链接到共享库,但出现以下错误 但这可以在32位计算机上工作,而不会出现任何此类错误。我尝试将标记手动添加到Makefile中也不能解决问题 我按照这里的建议尝试了该标志,但没有成功。 创建liblog4cplus.a: 并将-fPIC添加到CXXFLAGS和CFLAGS 然后用于编译我的共享库: 问题答案: 假设您正在生成一个共享库,最有可能发生的事情是您使用的变体未

  • 我尝试了这里建议的标志,但没有成功。 并将-fpic添加到CXXFLAGS和cflags

  • 问题内容: 我编写了JAX-RS的附加内容,并将Java EE 6 API包含为Maven依赖项。 然后我有一个测试用例: 但我得到一个错误: 如果我将Jersey作为JAX-RS实现而不是Java EE API包含在内,那么一切都很好。 感谢BalusC的提示,我知道了我的猜测:Java EE 6只是一个没有方法主体的API: 来自java.net博客 您可以使用此jar编译代码,但是当然不能使

  • 使用Axon Framework-我能够重播整个事件存储并重新创建视图模型。但是是否可以为特定类型或特定ID重播事件。 提前致谢

  • 我有一个类(A),它包含另一个类(B)的自动生成依赖项,而另一个类(B)又具有另一个类C的自动生成依赖项。 我正在尝试使用Mockito编写测试用例,并对依赖项使用spy注释。我在监视C类时遇到空指针错误。 如何从A类执行此单元测试?

  • 当在我的pom.xml中启用强制使用JUnit47提供程序时,我得到: pom.xml如下所示