【问题标题】: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() 会丢失数据?

(我正在使用最新的位。)

【问题讨论】:

  • 我知道如何监听信号事件。我不知道如何确保所有写入都被刷新。如果可能的话,如何优雅地做到这一点。

标签: node.js mongodb mongoose node-mongodb-native


【解决方案1】:

要接收 SIGINT 信号并停止连接,您可以使用以下代码:

process.on('SIGINT', () => {
    mongoose.disconnect().then(() => {
        process.exit();
    });
});

【讨论】:

  • 我知道该怎么做。问题是我如何优雅地这样做 - 如果可能的话 - 以便不会丢失挂起的写入。
  • 它不会强制关闭连接。
  • process.exit() 是一种快速失败的方法
  • 但是会在mongoose.disconnect() return RESOLVED promise之后调用...
猜你喜欢
  • 1970-01-01
  • 2015-06-25
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
相关资源
最近更新 更多