Разница между настройками тайм-аута в RequestConfig и IOReactorConfig?

Я использую асинхронный клиент HTTP Apache, и мне нужно кое-что изменить.

У меня есть следующий код, но я запутался при настройке RequestConfig и IOReactorConfig, потому что вы можете указать конфигурации таймаутов для них обоих.

Мой вопрос: в чем разница таймаутов между двумя из этих конфигов? Это двойная работа, и я могу просто установить одну из конфигураций? Или таймауты этих двух конфигураций управляют разными вещами?

    RequestConfig requestConfig = RequestConfig.custom()
            .setSocketTimeout(socketTimeout)
            .setConnectTimeout(connectionTimeout)
            .setConnectionRequestTimeout(connectionRequestTimeout)
            .build();

    // Create I/O reactor configuration
    IOReactorConfig ioReactorConfig = IOReactorConfig.custom()
            .setIoThreadCount(Runtime.getRuntime().availableProcessors())
            .setConnectTimeout(connectionTimeout)
            .setSoTimeout(socketTimeout)
            .build();

    // Create a custom I/O reactort
    ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(ioReactorConfig);

    PoolingNHttpClientConnectionManager cm = new PoolingNHttpClientConnectionManager(ioReactor);
    cm.setMaxTotal(maxConnTotal);
    cm.setDefaultMaxPerRoute(maxConnPerRoute);

    HttpAsyncClientBuilder defaultBuilder = HttpAsyncClients.custom()
            .setDefaultRequestConfig(requestConfig)
            .setConnectionManager(cm)
            .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
            .setRedirectStrategy(new LaxRedirectStrategy());
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
1 246
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Параметры реактора ввода / вывода применяются к каналам подключения, управляемым реактором ввода / вывода. Каналы подключения представляют собой двунаправленные потоки данных и не зависят от протокола приложения.

Параметры HTTP-запроса применяются к отдельным HTTP-запросам и управляют тем, как эти запросы выполняются.

Некоторое время назад пользователи просили простой способ переопределить тайм-аут сокета для каждого запроса. В ретроспективе решение о введении такого параметра, вероятно, было ошибкой.

Важное различие между тайм-аутом сокета на уровне канала соединения и тайм-аутом на уровне HTTP заключается в том, что последний применяется только после того, как маршрут HTTP был полностью установлен, процесс, который может включать обновление TLS и промежуточные переходы туннеля прокси, тогда как тайм-аут на уровне канала соединения применяется ко всем вводам / выводам на этом канале немедленно.

Считайте, что IOReactorConfig используется по умолчанию, а RequestConfig - как индивидуальное переопределение.

RequestConfig#socketTimeout был удален в HttpClient 5.0.

не могли бы вы объяснить мне, что такое PoolingNHttpClientConnectionManager, setDefaultMaxPerRoute, setMaxTotal. Я использую их для настройки RestClient в Elasticsearch из-за этой проблемы. Java.io.IOException: существующее соединение было принудительно закрыто удаленным хостом. Правильно ли я поступаю

saba safavi 05.09.2020 11:58

Другие вопросы по теме