Set connection timeout using Spring Webflux Reactive WebClient

后端 未结 2 502
暗喜
暗喜 2021-01-06 06:10

What is the correct way to set a (connection) timeout for the (default) WebClient?

Is it enough to just use Mono#timeout(Duration) method on the resulti

相关标签:
2条回答
  • 2021-01-06 06:41

    For now, WebClient does not offer that option as a top-level configuration option. You have to configure that at the underlying HTTP client library.

    So the answer to the other question is right. But in your case, you probably need to change the connection timeout, not the socket timeout (or both).

    ReactorClientHttpConnector connector =
                new ReactorClientHttpConnector(options ->
                        options.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 2000));
    WebClient webClient = WebClient.builder().clientConnector(connector).build();
    
    0 讨论(0)
  • As of Reactor Netty 0.8 and Spring Framework 5.1, you can set connection, read & write timeouts like the following:

    TcpClient tcpClient = TcpClient.create()
                     .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000) // Connection Timeout
                     .doOnConnected(connection ->
                             connection.addHandlerLast(new ReadTimeoutHandler(10)) // Read Timeout
                                       .addHandlerLast(new WriteTimeoutHandler(10))); // Write Timeout
    WebClient webClient = WebClient.builder()
        .clientConnector(new ReactorClientHttpConnector(HttpClient.from(tcpClient)))
        .build();
    
    0 讨论(0)
提交回复
热议问题