寻找 retryWhen 的替代方案,现在已弃用
Looking for an alternative of retryWhen which is now Deprecated
我遇到了 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
时重试。我从这个 post 找到了这个解决方案:
但是,在 reactor
的最新版本中,以下方法已被弃用:
public final Mono<T> retryWhen(Function<Flux<Throwable>, ? extends Publisher<?>> whenFactory)
经过数小时的谷歌搜索后,我还没有找到解决这个问题的方法:是否有 retryWhen
和 Retry.onlyIf
的替代方案以及 reactor
[=21= 的最新版本]
感谢您的帮助!
Retry 过去本质上是作为 reactor-extra
的一部分分发的效用函数生成器。 API 现在稍作改动并引入 reactor-core
(reactor.util.retry.Retry
),旧的 retryWhen()
变体已弃用。因此,不再需要包含额外的内容 - 在您的情况下,您可以执行以下操作:
.retryWhen(Retry.fixedDelay(3, Duration.ofSeconds(10))
.filter(e -> e instanceof ConnectTimeoutException))
我遇到了 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
时重试。我从这个 post 找到了这个解决方案:
但是,在 reactor
的最新版本中,以下方法已被弃用:
public final Mono<T> retryWhen(Function<Flux<Throwable>, ? extends Publisher<?>> whenFactory)
经过数小时的谷歌搜索后,我还没有找到解决这个问题的方法:是否有 retryWhen
和 Retry.onlyIf
的替代方案以及 reactor
[=21= 的最新版本]
感谢您的帮助!
Retry 过去本质上是作为 reactor-extra
的一部分分发的效用函数生成器。 API 现在稍作改动并引入 reactor-core
(reactor.util.retry.Retry
),旧的 retryWhen()
变体已弃用。因此,不再需要包含额外的内容 - 在您的情况下,您可以执行以下操作:
.retryWhen(Retry.fixedDelay(3, Duration.ofSeconds(10))
.filter(e -> e instanceof ConnectTimeoutException))