gpt4 book ai didi

spring-webflux - Spring WebFlux webclient 处理 ConnectTimeoutException

转载 作者:行者123 更新时间:2023-12-02 01:03:22 27 4
gpt4 key购买 nike

我正在使用 Spring WebFlux webclient 进行 REST 调用。我已经在 3000 上配置了连接超时毫秒,相应地:

WebClient webClient = WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(options -> options
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 3000)))
.build();

return webClient.get()
.uri("http://localhost:8081/resource")
.retrieve()
.onStatus(HttpStatus::isError, clientResponse -> {
// Some logging..
return Mono.empty();
})
.bodyToMono(MyPojo.class);
onStatus方法返回一个空 Mono400/ 500响应代码。我怎样才能对连接超时甚至读/写超时做同样的事情。现在它只是抛出一个 io.netty.channel.ConnectTimeoutException这不是由 onStatus 处理的

我不需要 @ExceptionHandler在我的 Controller 上,因为这些 REST 调用是更复杂流程的一部分,并且通过一个空的 Mono该元素应该被忽略。

返回 spring-webRestTemplate ,我记得连接超时也导致了 RestClientException .所以我们可以捕获 RestClientException对于所有异常和超时。我们有没有办法用 WebClient 做到这一点?还有?

最佳答案

Reactor 提供多个 onError***运营商:

return webClient.get()
.uri("http://localhost:8081/resource")
.retrieve()
.onErrorResume(ex -> Mono.empty())
.onStatus(HttpStatus::isError, clientResponse -> {
// Some logging..
return Mono.empty();
})
.bodyToMono(MyPojo.class);

关于spring-webflux - Spring WebFlux webclient 处理 ConnectTimeoutException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49207699/

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