有没有办法为整个执行指定超时HttpClient?
我尝试过以下方法:
httpClient.getParams().setParameter("http.socket.timeout", timeout * 1000);
httpClient.getParams().setParameter("http.connection.timeout", timeout * 1000);
httpClient.getParams().setParameter("http.connection-manager.timeout", new Long(timeout * 1000));
httpClient.getParams().setParameter("http.protocol.head-body-timeout", timeout * 1000);
Run Code Online (Sandbox Code Playgroud)
它实际上工作正常,除非远程主机发回数据 - 即使在一个字节/秒 - 它将继续永远读取!但我想在10秒内中断连接,无论主机是否响应.
在Spring Boot 1.5.x中,我正在创建RestTemplate如下的自定义:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
PoolingHttpClientConnectionManager poolingConnectionManager = new PoolingHttpClientConnectionManager();
poolingConnectionManager.setMaxTotal(restTemplateProps.getMaxConnectionsPerPool());
poolingConnectionManager.setDefaultMaxPerRoute(restTemplateProps.getMaxDefaultConnectionPerRoute());
CloseableHttpClient client = HttpClientBuilder.create().setConnectionManager(poolingConnectionManager).build();
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory =
new HttpComponentsClientHttpRequestFactory(client);
clientHttpRequestFactory.setConnectTimeout(restTemplateProps.getConnectionTimeout());
clientHttpRequestFactory.setReadTimeout(restTemplateProps.getSocketTimeout());
return restTemplateBuilder.requestFactory(clientHttpRequestFactory).build();
}
Run Code Online (Sandbox Code Playgroud)
但是,在迁移到Spring Boot 2.1.x之后,上面的代码无法编译。看起来好像requestFactory不HttpComponentsClientHttpRequestFactory作为输入参数。
谁能建议我如何在Spring Boot 2.1.x中实现以上代码?