在每个请求的基础上为 Spring WebClient 配置超时?
Configuring timeout on a per request basis for Spring WebClient?
我知道 但这会为所有请求全局配置超时。我正在寻找一种基于每个请求配置超时的方法。 IE。像这样的东西(无效的伪代码):
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();
这两个回答说的很清楚了
set-timeout-in-spring-webflux-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()
我知道
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();
这两个回答说的很清楚了
set-timeout-in-spring-webflux-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()