Как правильно отключить службу nodejs асинхронно - PullRequest
0 голосов
/ 04 октября 2018

Моему сервису NodeJS необходимо корректно завершить работу в случае, если пользователь нажмет ctrl-c, или при работе на Heroku он выключится (скажем, будет перезапущен).Чтобы полностью отключить его, мне нужно выполнить кучу async действий, таких как отправка события «shutdown» в RabbitMQ (чтобы другие сервисные службы знали, что он исчез), аккуратно закрыть соединение с базой данных и дождаться любых процессов, которые в данный момент выполняются.середина задания должна быть завершена.

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

Функции прослушивателя должны быть тольковыполнять синхронные операции.Процесс Node.js будет завершен сразу после вызова обработчиков событий 'exit', в результате чего любая дополнительная работа, все еще находящаяся в очереди в цикле событий, будет отменена.

Итак, как мне правильно завершить работумой сервер?

1 Ответ

0 голосов
/ 04 октября 2018

Это будет обрабатывать ctrl-c:

process.on("SIGINT", () => {
  setTimeout(() => {
    process.exit();
  }, 3000);
});

Я не уверен в половине вопроса Heroku, но надеюсь, что это по крайней мере поможет.

...