Получение таймаута запроса Spring RestTemplate, но connectionTimeout и ReadTimeout не установлены - PullRequest
1 голос
/ 04 августа 2020

Я использую 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 - в этом случае тайм-аут должен быть бесконечным. Что могло быть причиной проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...