【发布时间】:2017-09-21 18:06:33
【问题描述】:
我有多个用Nodejs Koa 编写的微服务在Docker Swarm 中运行。
由于 Kubernetes 或 Swarm 等容器编排工具可以即时扩展和缩减服务,我有一个问题是优雅地关闭 Nodejs 服务以防止未完成的运行过程。
下面是我能想到的流程:
- 向每个工作进程发送一个 SIGNINT 信号,docker swarm
缩减服务时向工作人员发送
SIGNINT? -
工人负责捕捉信号,清理或释放任何 使用资源并完成其进程,如何停止新的 api 请求,等待任何正在运行的进程完成后再关闭 下来了吗?
以下部分代码来自参考:
process.on('SIGINT', () => { const cleanUp = () => { // How can I clean resources like DB connections using Sequelizer } server.close(() => { cleanUp() process.exit() }) // Force close server after 5secs, `Should I do this?` setTimeout((e) => { cleanUp() process.exit(1) }, 5000) })
【问题讨论】:
-
我相信 Docker Swarm 会发送一个 SIGTERM,然后是一个 SIGKILL,所以您可能希望将您的代码移到
process.on('SIGTERM', () => {})
标签: node.js docker-swarm koa2