gpt4 book ai didi

java - Spring 网络客户端: retry with backoff on specific error

转载 作者:行者123 更新时间:2023-12-02 07:29:00 24 4
gpt4 key购买 nike

当响应为 5xx 时,我想在等待 10 秒后重试请求 3 次。但我没有看到可以使用的方法。在对象上

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

我可以看到方法:

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

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

在没有条件的情况下进行回退和次数重试

.retryBackoff 

还有一个retryWhen,但我不知道如何使用它

最佳答案

使用reactor-extra,你可以这样做:

.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();
}

关于java - Spring 网络客户端: retry with backoff on specific error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58520919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com