Я использую Spring RestTemplate для выполнения HTTP-запросов из моей службы следующим образом:
public ResponseEntity<String> request(String url, HttpMethod method, String body,
Map<String, String> authHeaders) throws HttpHelperException {
HttpHeaders httpHeaders = getHttpHeader(authHeaders);
HttpEntity<String> entity = new HttpEntity<String>(body, httpHeaders);
ResponseEntity<String> response = null;
try {
response = restTemplate.exchange(url, method, entity, String.class);
} catch (HttpClientErrorException | HttpServerErrorException e) {
Map<String, String> map = null;
try {
map = new HashMap<>(objectMapper.readValue(new String(e.getResponseBodyAsString()), Map.class));
throw new HttpHelperException(AppStatus.valueOf(e.getStatusCode().value()),
map.get("message"));
} catch (IOException e1) {
throw e;
}
} catch (RestClientException e) {
throw new HttpHelperException(e);
}
return response;
}
, где bean-компонент RestTemplate определяется как
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
RestTemplate restTemplate = builder.build();
restTemplate.setErrorHandler(customResponseErrorHandler);
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
return restTemplate;
}
С последних нескольких дней я начал видя исключение тайм-аута чтения
HttpHelperException: I/O error on POST request for <request_url>: Read timed out; nested exception is java.net.SocketTimeoutException: Read timed out
Я столкнулся с этим для нескольких служб, и все ошибки начались примерно в одно и то же время, что приводит меня к выводу, что проблема должна быть в самой моей службе (а также в других службах, которые доступ к той же конечной точке не сталкивается с этой проблемой).
Я не устанавливаю никакого значения для connectionTimeout и readTimeout - в этом случае тайм-аут должен быть бесконечным. Что могло быть причиной проблемы?