使用 WebClient 设置超时
Set Timeout With WebClient
@LoadBalanced
@Bean
public RestTemplate getRestTemplate()
{
HttpComponentClientHttpRequestFactory clientHttpRequestFactory=
new HttpComponentClientHttpRequestFactory();
clientHttpRequestFactory.setConnectTimeout(5000);
return new RestTemplate(clientHttpRequestFactory);
}
我必须用 WebClient 替换上面的代码
@LoadBalanced
@Bean(name = "WebClient")
public WebClient.Builder getWebClientBuilder()
{
// create HttpComponentClientHttpRequestFactory instance and it can not be
//passed to builder method as an argument
return WebClient.builder();
}
我需要使用 WebClient 设置超时的替代方法。
如果你想为特定请求设置超时时间,你可以这样做:
webClient.get()
.uri("/employees")
.retrieve()
.bodyToFlux(Employee.class)
.timeout(Duration.ofMillis(10_000))
如果您不想将超时应用于所有请求,您可以像这样构建您的 Web 客户端:
@Bean
public WebClient getWebClient()
{
HttpClient httpClient = HttpClient.create()
.tcpConfiguration(client ->
client.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000)
.doOnConnected(conn -> conn
.addHandlerLast(new ReadTimeoutHandler(10))
.addHandlerLast(new WriteTimeoutHandler(10))));
ClientHttpConnector connector = new ReactorClientHttpConnector(httpClient.wiretap(true));
return WebClient.builder()
.baseUrl("http://localhost:3000")
.clientConnector(connector)
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.build();
}
}
你可以在这里看到
https://howtodoinjava.com/spring-webflux/webclient-set-timeouts/
@LoadBalanced
@Bean
public RestTemplate getRestTemplate()
{
HttpComponentClientHttpRequestFactory clientHttpRequestFactory=
new HttpComponentClientHttpRequestFactory();
clientHttpRequestFactory.setConnectTimeout(5000);
return new RestTemplate(clientHttpRequestFactory);
}
我必须用 WebClient 替换上面的代码
@LoadBalanced
@Bean(name = "WebClient")
public WebClient.Builder getWebClientBuilder()
{
// create HttpComponentClientHttpRequestFactory instance and it can not be
//passed to builder method as an argument
return WebClient.builder();
}
我需要使用 WebClient 设置超时的替代方法。
如果你想为特定请求设置超时时间,你可以这样做:
webClient.get()
.uri("/employees")
.retrieve()
.bodyToFlux(Employee.class)
.timeout(Duration.ofMillis(10_000))
如果您不想将超时应用于所有请求,您可以像这样构建您的 Web 客户端:
@Bean
public WebClient getWebClient()
{
HttpClient httpClient = HttpClient.create()
.tcpConfiguration(client ->
client.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000)
.doOnConnected(conn -> conn
.addHandlerLast(new ReadTimeoutHandler(10))
.addHandlerLast(new WriteTimeoutHandler(10))));
ClientHttpConnector connector = new ReactorClientHttpConnector(httpClient.wiretap(true));
return WebClient.builder()
.baseUrl("http://localhost:3000")
.clientConnector(connector)
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.build();
}
}
你可以在这里看到
https://howtodoinjava.com/spring-webflux/webclient-set-timeouts/