在我的lambda函数中,我试图在发送回调时立即关闭mongo连接。但它有一个问题。
db.close()
内容完美无缺时。我认为lambda重用了所有函数的连接,因为我在处理程序的顶部打开了连接:
// Connect to database
mongoose.connect(process.env.DATABASE_URL);
const handleCreateUser = async (event, context, callback) => {
// eslint-disable-next-line no-param-reassign
context.callbackWaitsForEmptyEventLoop = false;
const data = JSON.parse(event.body);
const { user, userProfile } = data;
await createUser({ callback, user, userProfile });
};
知道怎么解决这个问题吗?我们真的必须在此时关闭连接吗?
答案 0 :(得分:4)
在处理程序中移动mongoose.connect
代码,或者停止调用db.close()
。您当前有一个数据库连接被Lambda函数的多次调用重用,但是在第一次调用完成后您将关闭它。
答案 1 :(得分:0)
我的用法是 Python,但您将使用首选语言执行此操作。 lambda 的最佳解决方案,考虑按次付费: 在lamba函数之前全局运行它(我在配置类中执行)
if self.conn == None or self.conn.close == 1:
self.make_connection()
取决于您如何实现 make_connection()。 根本不要使用 db.close()。
AWS 调用会加载您的 lambda 函数并运行一次全局函数。 之后每次调用它只运行它保持加载一段时间的 lambda(从一些测试 20 分钟到 50 分钟)。 数据库驱动程序将在内部超时时关闭连接。
优点 - 您在很长一段时间内只打开一次连接,为每次 lambda 运行节省时间。
缺点 - lambda 一直在内存中。
在我看来这是值得的。
答案 2 :(得分:-3)
可以尝试 try-with-resource 自动关闭连接。