NestJS AWS Lambda集成Sequelize:是否需每次调用后关闭连接?
问题
我已在以下代码片段中配置了Sequelize连接池参数,请问是否需要在每次AWS Lambda调用后关闭数据库连接?此外,该AWS Lambda函数每分钟触发一次,仅依靠配置的连接池参数是否足以完成连接关闭?
export const databaseProviders = [ { provide: 'vendorDB', useFactory: async (awsSecrets: AwsSecretsService) => { const { host, port, username, password, database } = await awsSecrets.getVendorDbConfig(); const sequelize = new Sequelize({ dialect: 'postgres', host, port, username, password, database, logging: true, pool: { max: 1, min: 0, idle: 1000, }, }); sequelize.addModels([VendorEntity]); // await sequelize.sync(); return sequelize; }, inject: [AwsSecretsService], },
回答
是否需要每次Lambda调用后手动关闭连接?
不用。Lambda的执行环境可能会被复用(冷启动后会保持一段时间的热状态),如果每次调用都手动关闭连接,下次复用环境时就得重新建立连接,反而增加延迟,浪费了连接池的优化作用。仅靠当前的连接池配置是否足够处理连接关闭?
完全足够。结合你的配置和调用频率来看:max:1限制连接池最多只有1个活跃连接,刚好适配单个Lambda实例的使用场景min:0允许连接池在无需求时释放所有空闲连接idle:1000表示连接空闲1秒后就会被自动回收关闭
你的Lambda每分钟触发一次,每次调用结束后连接会进入空闲状态,1秒后就会被连接池按照规则回收关闭,这个配置完全匹配你的调用频率,不会出现连接泄漏问题。
额外说明:如果Lambda执行环境被复用,理论上下次调用可以直接使用池中的空闲连接,但因为你的idle设置只有1秒,远小于60秒的调用间隔,下次调用时旧连接早就被回收了,会重新建立新连接,这也是合理的,不会有任何问题。
内容的提问来源于stack exchange,提问作者Ujjual
相关产品推荐
相关产品推荐

