如何优雅地关闭猫鼬的连接池?
Posted
技术标签:
【中文标题】如何优雅地关闭猫鼬的连接池?【英文标题】:How do I gracefully shutdown mongoose's connection pool? 【发布时间】:2019-06-27 01:38:21 【问题描述】:如果我收到 SIGINT/SIGTERM(例如 ctrl+c),那么我必须优雅地停止我的应用程序并关闭与 mongodb 服务器的所有连接。
大多数文档/教程都声明要停止连接(或
连接池),我必须使用mongoose.disconnect()
- 它在池中的连接上调用.close()
。
然而,所有这些文档也都说应该在所有待处理的写入完成后完成。
当我收到信号事件(例如 SIGINT、SIGTERM 等)时,我如何知道这一点? mongoose 有正常关机功能吗,还是打电话disconnect()
会丢失数据?
(我正在使用最新的位。)
【问题讨论】:
我知道如何监听信号事件。我不知道如何确保所有写入都被刷新。如果可能的话,如何优雅地做到这一点。 【参考方案1】:要接收 SIGINT 信号并停止连接,您可以使用以下代码:
process.on('SIGINT', () =>
mongoose.disconnect().then(() =>
process.exit();
);
);
【讨论】:
我知道该怎么做。问题是我如何优雅地这样做 - 如果可能的话 - 以便不会丢失挂起的写入。 它不会强制关闭连接。process.exit()
是一种快速失败的方法
但是会在mongoose.disconnect() return RESOLVED promise之后调用...以上是关于如何优雅地关闭猫鼬的连接池?的主要内容,如果未能解决你的问题,请参考以下文章