【发布时间】:2021-04-19 03:32:15
【问题描述】:
我试图调用一个服务,并想为它设置一个超时。我找到了两种方法可以做到这一点。
- 通过在
HttpClient中全局设置读写超时,然后在ClientHttpConnector中使用它。
HttpClient httpClient = HttpClient.create()
.tcpConfiguration(client ->
client.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000)
.doOnConnected(c -> c
.addHandlerLast(new ReadTimeoutHandler(10))
.addHandlerLast(new WriteTimeoutHandler(10))));
ClientHttpConnector conn = new ReactorClientHttpConnector(httpClient.wiretap(true));
return WebClient.builder()
.baseUrl("http://localhost:8080")
.clientConnector(conn)
.build();
- 在请求中使用
timeout()。
return webClient.get()
.uri("/someUri")
.retrieve()
.bodyToFlux(Foo.class)
.timeout(Duration.ofMillis(10_000));
实现和性能影响之间的主要区别是什么?
还有Connect、Read 和Write 在第一个实现与HttpClient 时的超时有什么区别?
【问题讨论】:
标签: java spring spring-boot reactive-programming spring-webflux