kafkajs - изящно остановить экземпляр kafkajs после отключения
Я использую kafkajs как в производственных, так и в интеграционных тестах.
Перед всеми моими тестами я создаю экземпляр kafkajs с производителем и потребителем, подключением / подпиской / запуском (eachMeassage)... После всех моих тестов я хочу изящно остановить весь процесс моего узла, включая компоненты kafkajs.
Я делаю вот что:
export function stopHelper(): Promise<void> {
return new Promise<void>((resolve, reject) => {
if (kafkaHelperState === kafkaHelperStateStatus.running) {
kafkaHelperState = kafkaHelperStateStatus.stopping
log.debug("stopHelper", kafkaHelperState);
Promise.all([producer.disconnect, consumer.disconnect])
.then(() => {
kafkaHelperState = kafkaHelperStateStatus.stopped
log.info("stopHelper", kafkaHelperState);
resolve()
})
.catch(error => reject(error))
} else {
log.warn("stopHelper", "kafkaHelper is not " + kafkaHelperStateStatus.running)
}
})
}
Обещания, кажется, работают. Я вижу, что мой набор интеграционных тестов завершен, и производитель и потребитель отключены. Но мой процесс узла все еще работает, ничего не делая.
До этого я использовал kafka-node. Когда я остановил потребителя, процесс моего узла завершился без указания какого-либо процесса. Exit(0)
Есть ли способ изящно уничтожить экземпляр kafkajs в процессе узла?
1 ответ
Решение
Promise.all([producer.disconnect(), consumer.disconnect()])
вместо того
Promise.all([producer.disconnect, consumer.disconnect])