Почему Elasti c Search Rest Highlevel Client препятствует завершению процесса JVM? - PullRequest
0 голосов
/ 07 апреля 2020

Проблема

Когда я запускаю приложение Kotlin, создаю и elasti c клиент, а затем запускаю основной поток, процесс не завершается.

import org.elasticsearch.client.create

fun main() {
    val elasticClient = create("host", 8080)
    // the main thread ends here but JVM process won't exit
}

Вероятно, это связано с тем, что клиент Elasti c создает пул потоков, который препятствует выходу процесса. Это может быть подтверждено

fun main() {
    val elasticClient = create("host", 8080)
    elasticClient.close()
    // after calling close() the process exits as expected
}

Это особенно прискорбно, если вы ожидаете, что процесс завершится, если клиент не сможет подключиться к серверу Elasti c.

fun main() {
    val elasticClient = create("host", 8080)
    // ping() throws ConnectException when Elastic server is unreachable
    elasticClient.ping()
    // If ConnectException is unhandled the main thread ends but the process will hang forever due to the client threads being alive
}

Вопросы

  1. Почему клиент не использует потоки демонов , которые не поддерживали бы процесс?
  2. Могу ли я настроить клиент для использования потоков демонов вместо пользовательских потоков?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...