为每个请求配置 Spring WebClient 的超时



我知道Spring 5 webflux如何在Webclient上设置超时,但这为所有请求全局配置超时。我正在寻找一种基于每个请求配置超时的方法。即像这样的东西(不起作用的伪代码):

WebClient client = ...
// Call 1
client.timeout(5, TimeUnit.SECONDS).contentType(APPLICATION_JSON).syncBody(..).exchange(). ..
// Call 2
client.timeout(4, TimeUnit.SECONDS).contentType(APPLICATION_JSON).syncBody(..).exchange(). 

timeout函数是为了展示我所追求的。我怎样才能做到这一点?在超时时正确清理资源也很重要。

如果它有任何区别,我正在使用Netty(reactor-netty 0.8.4.RELEASE):

HttpClient httpClient = HttpClient.create(). ...;
 WebClient webClient = WebClient.builder()
          .clientConnector(new ReactorClientHttpConnector(httpClient))
          .build();

这两个答案清楚地解释了它。

设置超时-在弹簧中-Webflux-WebClient
spring-5-webflux-how-to-set-a-timeout-on-webclient.

此外,如果您想改变选项,

你可以像下面这样做,

 TcpClient tcpClient = TcpClient.create()
                .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000)
                .doOnConnected(connection ->
                        connection.addHandlerLast(new ReadTimeoutHandler(10))
                                .addHandlerLast(new WriteTimeoutHandler(10)));
        return this.webClient
                .mutate()
                .clientConnector(new ReactorClientHttpConnector(HttpClient.from(tcpClient)))
                .build()
                .get()

最新更新