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])
Другие вопросы по тегам