我在Node中创建了一个Lambda函数,通过这个函数将数据存储到Mongodb:
const Connection = MongoClient.connect(...);
const demoColl = Connection.collection('demo');
demoColl.bulkWrite(bulkArray...);
client.close();我已经通过invoke local进行了顺利的测试,在一个接一个地运行时也是成功的。
但是我的应用程序每秒调用函数3-5次,lambda显示此错误消息。
“errorMessage”:“拓扑被破坏”,"errorType":"MongoError“
我已经做了一项研究,当函数仍然运行时,它会导致关闭数据库。如何防止其中一个连接关闭不会影响另一个Lambda功能?
发布于 2018-02-15 06:34:51
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
https://stackoverflow.com/questions/48800271
复制相似问题