Клиент Java High Level Rest не разрывает соединение, хотя тайм-аут установлен

Мы имеем дело с запросом большого количества данных с нашего эластичного поискового сервера. Однако в случайных сценариях соединение, созданное клиентом High Level Rest, не освобождается и блокирует наш поток кода.

Клиент Rest открывает соединение для получения данных, но не возвращает. Хотя мы указали таймауты также, как показано ниже, но у остальных клиентов таймаут также не истек.

RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(httpHost).setRequestConfigCallback(
        requestConfigBuilder -> requestConfigBuilder
            .setConnectTimeout(30000)
            .setConnectionRequestTimeout(90000)
            .setSocketTimeout(90000)).setMaxRetryTimeoutMillis(90000));

Мы также проверили Elastic search server, запрос завершился, но клиент все еще не освобождает соединение. Кроме того, когда мы запускаем эти запросы, нагрузка на эластичный поиск и сервер совсем не велика.

Запросы тоже не такие сложные. Он состоит только из фильтрации и единого уровня агрегирования.

Поток, в котором запускается этот запрос, был заблокирован более 10 часов. Ожидаемое время - всего несколько минут.

Однако, когда мы повторим запрос позже, все пройдет нормально. Так что это происходит случайно.

Конфигурации:

  • Версия Elasticsearch: 6.5.4
  • Остальная версия клиента: 6.5.4
  • allow_partial_search_results: false (как на стороне клиента, так и на уровне кластера на стороне сервера)

Не могли бы вы подсказать, что нам не хватает?

Связанный вопрос: Rest High Level Client: Тайм-аут запроса не работает

0 ответов

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