使用 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/