Тайм-аут RestTemplate не соблюдаетсяApache

Anonymous
Тайм-аут RestTemplate не соблюдается

Сообщение Anonymous »

Я пытаюсь правильно настроить http-клиент с объединением в пул.
Идея состоит в том, что у меня есть параметрocketTimeout, равный 700 миллисекундам. У меня есть тестовый URL-адрес Beeceptor для моего соединения. Проблема в том, что тайм-аут происходит через> 1200 миллисекунд, то есть почти на 80 % больше, чем я настроил.
Вот мои настройки:
public RestTemplateConnector() {
restTemplate = new RestTemplate();

int socketTimeout = 700;
int connectionTimeout = 300;

HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
httpRequestFactory.setHttpClient(httpClient(connectionTimeout, socketTimeout));

restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8));
restTemplate.setRequestFactory(httpRequestFactory);
}

private CloseableHttpClient httpClient(long connectionTimeout, int socketTimeout) {

return HttpClients.custom().setConnectionManager(poolingConnectionManager(connectionTimeout, socketTimeout))
.setKeepAliveStrategy(connectionKeepAliveStrategy()).build();
}

private PoolingHttpClientConnectionManager poolingConnectionManager(long connectionTimeout, int socketTimeout) {

ConnectionConfig oConnectionConfig = ConnectionConfig.custom()
.setConnectTimeout(connectionTimeout, TimeUnit.MILLISECONDS)
.setSocketTimeout(socketTimeout, TimeUnit.MILLISECONDS).build();

PoolingHttpClientConnectionManager poolingConnectionManager = new PoolingHttpClientConnectionManager();
poolingConnectionManager.setMaxTotal(500);
poolingConnectionManager.setDefaultMaxPerRoute(25);
poolingConnectionManager.setDefaultConnectionConfig(oConnectionConfig);
return poolingConnectionManager;
}

private PoolingHttpClientConnectionManager poolingConnectionManager(long connectionTimeout, int socketTimeout) {

ConnectionConfig oConnectionConfig = ConnectionConfig.custom()
.setConnectTimeout(connectionTimeout, TimeUnit.MILLISECONDS)
.setSocketTimeout(socketTimeout, TimeUnit.MILLISECONDS).build();

PoolingHttpClientConnectionManager poolingConnectionManager = new PoolingHttpClientConnectionManager();
poolingConnectionManager.setMaxTotal(500);
poolingConnectionManager.setDefaultMaxPerRoute(25);
poolingConnectionManager.setDefaultConnectionConfig(oConnectionConfig);
return poolingConnectionManager;
}

private ConnectionKeepAliveStrategy connectionKeepAliveStrategy() {
return (response, context) -> TimeValue.ofMilliseconds(5000);
}



Подробнее здесь: https://stackoverflow.com/questions/793 ... -respected

Вернуться в «Apache»