Тайм-аут 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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