У меня есть приложение hybris, которое использует шаблон rest для вызова API restful и использует ответ json. Я наблюдаю, что когда приложение попадает в API несколько раз во время загрузки, время отклика от этих API значительно увеличивается. Я установил тайм-ауты на 15 секунд, но эти тайм-ауты не применяются. Соединение все еще остается открытым, и оно сохраняетожидание ответа в течение 5 минут. Я не вижу никаких исключений в журналах для таких длинных запросов, а также не истекает время ожидания.
Ниже приведен код, который я использую для установки времениout.Is есть что-то, что мне не хватает, чтобы установить тайм-ауты.
public <E, T> E processService(String Url, final T serviceReq,
final Class<E> serviceResponse, final HttpMethod
httpMethod, final MediaType contentType,
final Map<String, String> queryParams, final
Map<String, String> header,
final Map<String, String> pathVariables) throws
Exception {
RestTemplate restTemplate = getRestTemplate();
setTimeoutProperties(restTemplate);
<business logic to fire request and process response>}
private RestTemplate getRestTemplate() {
if (LOG.isDebugEnabled()) {
getRestTemplate().setInterceptors(Collections.singletonList(new
RequestResponseLoggingInterceptor()));
}
return getRestTemplate();
}
private void setTimeoutProperties(RestTemplate template) {
final int readTimeout = configurationService.getConfiguration().getInteger("client.readtimeout",
5000);
final int connectTimeout = configurationService.getConfiguration()
.getInteger("client.connectiontimeout", 5000);
if (template.getRequestFactory() instanceof HttpComponentsClientHttpRequestFactory) {
HttpComponentsClientHttpRequestFactory httpRequestFactory = (HttpComponentsClientHttpRequestFactory) template
.getRequestFactory();
httpRequestFactory.setConnectTimeout(connectTimeout);
httpRequestFactory.setReadTimeout(readTimeout);
httpRequestFactory.setConnectionRequestTimeout(connectTimeout);
}
}