Проблема
Когда я запускаю приложение 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
}
Вопросы
- Почему клиент не использует потоки демонов , которые не поддерживали бы процесс?
- Могу ли я настроить клиент для использования потоков демонов вместо пользовательских потоков?