【问题标题】:AWS Lambda Mongodb Error: topology was destroyedAWS Lambda Mongodb 错误:拓扑已破坏
【发布时间】:2018-02-15 05:06:42
【问题描述】:

我已经创建了一个 Lambda 函数,用于通过 Node JS 中的这个函数将数据存储到 Mongodb:

const Connection = MongoClient.connect(...);
const demoColl = Connection.collection('demo');
demoColl.bulkWrite(bulkArray...);
client.close();

我已经通过invoke local顺利测试过,一一运行也成功。

但我的应用程序每秒调用该函数 3-5 次,lambda 显示此错误消息

"errorMessage":"拓扑被破坏","errorType":"MongoError"

我做了一项研究,它会导致在函数仍在运行时关闭数据库。如何防止其中一个连接关闭不会影响另一个 Lambda 函数?

【问题讨论】:

  • 当连接关闭但您仍然尝试访问模型时会发生这种情况。
  • Lambda - 你的意思是 AWS Lambda?
  • 是的 AWS Lambda,很抱歉错过了这个信息

标签: node.js mongodb lambda


【解决方案1】:
import * as mongoose from "mongoose";

(<any>mongoose).Promise = global.Promise;
let cacheDb: mongoose.Connection = null;
export let connect = () => {
    if (cacheDb && mongoose.connection.readyState === 1) {
        return cacheDb;
    } else {
        // Mongoose config and setting global Promise
        mongoose.connect(process.env.MONGODB_URI, {
            promiseLibrary: global.Promise,
            connectTimeoutMS: 20 * 1000
        }).then(() => {
            cacheDb = mongoose.connection;
            return cacheDb;
        }).catch((err) => {
            console.log(err);
        });
    }
};
export let disconnect = () => {
    mongoose.disconnect();
}

我有这个缓存 MongoDB 连接并在可用时重复使用的文件。只需确保它在 lambda 处理程序之外。

而且,关闭连接并不是一个好主意,因为这会使您的 lambda 在每次调用 lambda 时都连接 - 增加了 DB 和 Lambda 执行时间的负担。

参考:https://blog.cloudboost.io/i-wish-i-knew-how-to-use-mongodb-connection-in-aws-lambda-f91cd2694ae5

【讨论】:

  • 这是 TypeScript,仅供参考
猜你喜欢
  • 2015-09-03
  • 1970-01-01
  • 2015-07-09
  • 2020-10-23
  • 2016-12-27
  • 2015-08-06
  • 2021-09-23
相关资源
最近更新 更多