RestTemplate请求中的连接超时无法正常工作



我正在使用RestTemplate从外部服务获取数据,我想为请求设置如下超时:

CloseableHttpClient client = HttpClients.custom().setDefaultRequestConfig(RequestConfig.custom().setConnectTimeout(600000).setConnectionRequestTimeout(600000).setSocketTimeout(600000).build()).build();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(client);
requestFactory.setConnectTimeout(600000);
requestFactory.setConnectionRequestTimeout(600000);
requestFactory.setReadTimeout(600000);
RestTemplate restTemplate = new RestTemplate(requestFactory);
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Basic " + settings.getBase64EncodedAuthString());
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<BaseParameters> request = new HttpEntity<>(parameters, headers);
ResponseEntity<MyResponse> response = restTemplate.exchange("https://my-external-service.com/service1", HttpMethod.POST,
request, MyResponse.class);

虽然我已经将超时设置为600000ms(10分钟(,但有时我在20秒后仍然收到服务器的超时异常,这就是我收到的异常:

org.springframework.web.client.ResourceAccessException->上的I/O错误的POST请求"https://my-external-service.com/service1":连接到我的外部服务.com:443失败:连接超时:连接嵌套异常为org.apache.http.conn.HttpHostConnectException:连接到我的外部服务:443失败:连接超时:连接

有人知道我在这里的超时配置是否有问题,或者我需要配置更多的东西吗?谢谢

您使用的是HTTP请求配置,请求级别的配置仅在连接路由完全建立后适用。它不适用于SSL握手或CONNECT请求。您需要配置连接管理器在创建连接时应用的套接字属性。

此链接将有所帮助https://github.com/spring-projects/spring-boot/issues/11379

最新更新