gpt4 book ai didi

spring-boot - 寻找 retryWhen 的替代方案,现在已弃用

转载 作者:行者123 更新时间:2023-12-04 11:42:53 27 4
gpt4 key购买 nike

我遇到了 WebClient 的问题和 reactor-extra .确实,我有以下方法:

public Employee getEmployee(String employeeId) {
return webClient.get()
.uri(FIND_EMPLOYEE_BY_ID_URL, employeeId)
.retrieve()
.onStatus(HttpStatus.NOT_FOUND::equals, clientResponse -> Mono.empty())
.onStatus(HttpStatus::is5xxServerError, clientResponse -> Mono.error(new MyCustomException("Something went wrong calling getEmployeeById")))
.bodyToMono(Employee.class)
.retryWhen(Retry.onlyIf(ConnectTimeoutException.class)
.fixedBackoff(Duration.ofSeconds(10))
.retryMax(3))
.block();
}

我发现我可以使用 retryWhen(Retry.onlyIf(...))因为我只想在 ConnectTimeoutException 时重试被抛出。我从这篇文章中找到了这个解决方案: spring webclient: retry with backoff on specific error

但是,在 reactor的最新版本中以下方法已被弃用:
public final Mono<T> retryWhen(Function<Flux<Throwable>, ? extends Publisher<?>> whenFactory)
经过数小时的谷歌搜索,我还没有找到任何解决此问题的方法: retryWhen 是否有任何替代方案?和 Retry.onlyIf最新版本 reactor
谢谢你的帮助 !

最佳答案

重试本质上是一个效用函数生成器,作为 reactor-extra 的一部分分发. API 现在已经改变了一点,并带入了 reactor-core ( reactor.util.retry.Retry ),与旧的 retryWhen()变体已弃用。因此,无需再包含额外内容 - 在您的情况下,您可以执行以下操作:

.retryWhen(Retry.fixedDelay(3, Duration.ofSeconds(10))
.filter(e -> e instanceof ConnectTimeoutException))

关于spring-boot - 寻找 retryWhen 的替代方案,现在已弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62419152/

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