Update docs on timeouts with WebClient

Closes gh-25115
This commit is contained in:
Rossen Stoyanchev 2020-08-28 22:19:01 +01:00
parent c4e1e4ee1e
commit 42aeb6cd93
1 changed files with 76 additions and 18 deletions

View File

@ -251,8 +251,11 @@ To configure a connection timeout:
import io.netty.channel.ChannelOption; import io.netty.channel.ChannelOption;
HttpClient httpClient = HttpClient.create() HttpClient httpClient = HttpClient.create()
.tcpConfiguration(client -> .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000);
client.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000));
WebClient webClient = WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(httpClient))
.build();
---- ----
[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"] [source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"]
.Kotlin .Kotlin
@ -260,10 +263,14 @@ To configure a connection timeout:
import io.netty.channel.ChannelOption import io.netty.channel.ChannelOption
val httpClient = HttpClient.create() val httpClient = HttpClient.create()
.tcpConfiguration { it.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000)} .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000);
val webClient = WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(httpClient))
.build();
---- ----
To configure a read and/or write timeout values: To configure a read or write timeout:
[source,java,indent=0,subs="verbatim,quotes",role="primary"] [source,java,indent=0,subs="verbatim,quotes",role="primary"]
.Java .Java
@ -272,10 +279,12 @@ To configure a read and/or write timeout values:
import io.netty.handler.timeout.WriteTimeoutHandler; import io.netty.handler.timeout.WriteTimeoutHandler;
HttpClient httpClient = HttpClient.create() HttpClient httpClient = HttpClient.create()
.tcpConfiguration(client -> .doOnConnected(conn -> conn
client.doOnConnected(conn -> conn .addHandlerLast(new ReadTimeoutHandler(10))
.addHandlerLast(new ReadTimeoutHandler(10)) .addHandlerLast(new WriteTimeoutHandler(10)));
.addHandlerLast(new WriteTimeoutHandler(10))));
// Create WebClient...
---- ----
[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"] [source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"]
.Kotlin .Kotlin
@ -283,12 +292,59 @@ To configure a read and/or write timeout values:
import io.netty.handler.timeout.ReadTimeoutHandler import io.netty.handler.timeout.ReadTimeoutHandler
import io.netty.handler.timeout.WriteTimeoutHandler import io.netty.handler.timeout.WriteTimeoutHandler
val httpClient = HttpClient.create().tcpConfiguration { val httpClient = HttpClient.create()
it.doOnConnected { conn -> conn .doOnConnected { conn -> conn
.addHandlerLast(ReadTimeoutHandler(10)) .addHandlerLast(new ReadTimeoutHandler(10))
.addHandlerLast(WriteTimeoutHandler(10)) .addHandlerLast(new WriteTimeoutHandler(10))
} }
}
// Create WebClient...
----
To configure a response timeout for all requests:
[source,java,indent=0,subs="verbatim,quotes",role="primary"]
.Java
----
HttpClient httpClient = HttpClient.create()
.responseTimeout(Duration.ofSeconds(2));
// Create WebClient...
----
[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"]
.Kotlin
----
val httpClient = HttpClient.create()
.responseTimeout(Duration.ofSeconds(2));
// Create WebClient...
----
To configure a response timeout for a specific request:
[source,java,indent=0,subs="verbatim,quotes",role="primary"]
.Java
----
WebClient.create().get()
.uri("http://example.org/path")
.httpRequest(httpRequest -> {
HttpClientRequest reactorRequest = httpRequest.getNativeRequest();
reactorRequest.responseTimeout(Duration.ofSeconds(2));
})
.retrieve()
.bodyToMono(String.class);
----
[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"]
.Kotlin
----
WebClient.create().get()
.uri("http://example.org/path")
.httpRequest { httpRequest: ClientHttpRequest ->
val reactorRequest = httpRequest.getNativeRequest<HttpClientRequest>()
reactorRequest.responseTimeout(Duration.ofSeconds(2))
}
.retrieve()
.bodyToMono(String::class.java)
---- ----
@ -303,18 +359,20 @@ The following example shows how to customize Jetty `HttpClient` settings:
---- ----
HttpClient httpClient = new HttpClient(); HttpClient httpClient = new HttpClient();
httpClient.setCookieStore(...); httpClient.setCookieStore(...);
ClientHttpConnector connector = new JettyClientHttpConnector(httpClient);
WebClient webClient = WebClient.builder().clientConnector(connector).build(); WebClient webClient = WebClient.builder()
.clientConnector(new JettyClientHttpConnector(httpClient))
.build();
---- ----
[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"] [source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"]
.Kotlin .Kotlin
---- ----
val httpClient = HttpClient() val httpClient = HttpClient()
httpClient.cookieStore = ... httpClient.cookieStore = ...
val connector = JettyClientHttpConnector(httpClient)
val webClient = WebClient.builder().clientConnector(connector).build(); val webClient = WebClient.builder()
.clientConnector(new JettyClientHttpConnector(httpClient))
.build();
---- ----
By default, `HttpClient` creates its own resources (`Executor`, `ByteBufferPool`, `Scheduler`), By default, `HttpClient` creates its own resources (`Executor`, `ByteBufferPool`, `Scheduler`),