Клиент 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: Тайм-аут запроса не работает