Лучший способ настроить таймауты в Apache HttpClient 5JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Лучший способ настроить таймауты в Apache HttpClient 5

Сообщение Anonymous »

Я пытаюсь понять разницу между различными конфигурациями тайм-аута в HttpClient и самым простым способом его настройки.
В этом коде показаны различные параметры:

Код: Выделить всё

RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(connectionRequestTimeout, TimeUnit.MILLISECONDS)
.setResponseTimeout(responseTimeout, TimeUnit.MILLISECONDS)
.setConnectTimeout(connectTimeout, TimeUnit.MILLISECONDS) // Deprecated - Use {@link ConnectionConfig.Builder#setConnectTimeout(Timeout)}.
.build();

ConnectionConfig connectionConfig = ConnectionConfig.custom()
.setConnectTimeout(connectTimeout, TimeUnit.MILLISECONDS)
.setSocketTimeout(socketTimeout, TimeUnit.MILLISECONDS)
.build();

SocketConfig socketConfig = SocketConfig.custom()
.setSoTimeout(socketTimeout, TimeUnit.MILLISECONDS)
.build();

PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = PoolingHttpClientConnectionManagerBuilder.create()
.setDefaultConnectionConfig(connectionConfig)
.setDefaultSocketConfig(socketConfig)
.build();

HttpClient httpClient = HttpClientBuilder.create()
.setConnectionManager(poolingHttpClientConnectionManager)
.setDefaultRequestConfig(requestConfig)
.build();
На данный момент я понимаю следующее:

Код: Выделить всё

ConnectionRequestTimeout
 — время, необходимое для получения соединения из пула. Это актуально при нагрузке.

Код: Выделить всё

ConnectTimeout
— время, необходимое для установления соединения.
Но в чем разница между:

Код: Выделить всё

RequestConfig.setResponseTimeout()
ConnectionConfig.setSocketTimeout()
SocketConfig.setSoTimeout()
похоже, что все они имеют тайм-ауты чтения/ответа на запрос. Нужно ли мне установить только один из них?
По результатам некоторых ограниченных тестов кажется, что ResponseTimeout переопределяет остальные, возможно, подразумевая, что это все, что мне нужно.
В данном случае это все, что мне нужно.
было бы неплохо просто использовать RequestConfig, чтобы установить все три, но ConnectTimeout там устарел и перемещен в ConnectionConfig, который также содержит SocketTimeout.
Я использую это с SpringBoot 3/Spring 6, и недавнее удаление параметра конфигурации readTimeout в HttpComponentsClientHttpRequestFactory, похоже, подразумевает, что лучше всего настроить его непосредственно в HttpClient.< /п>

Подробнее здесь: https://stackoverflow.com/questions/780 ... tpclient-5
Ответить

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

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

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

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

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