在尝试将无服务器Aurora数据库用作应用程序的一部分时,我遇到了一个问题。
问题本质上是,当数据库处于冷态时,建立连接的时间可能大于30秒(由于db spinup)-这似乎比Sequelize(使用mysql)中的默认超时长,并且据我所知,我找不到其他方法可以增加此超时时间,或者我需要某种重新尝试连接的方法?
这是我当前的配置:
const sequelize = new Sequelize(DATABASE, DB_USER, DB_PASSWORD, {
host: DB_ENDPOINT,
dialect: "mysql",
operatorsAliases: false,
pool: {
max: 2,
min: 0,
acquire: 120000, // This needs to be fairly high to account for a
serverless db spinup
idle: 120000,
evict: 120000
}
});
一些额外的要点: 一旦数据库变热,一切都将正常运行。 保持数据库“热”,尽管在技术上可以正常工作,但在某种程度上克服了将其作为无服务器db的意义(成本原因)。 我愿意在超时是连接错误的情况下让客户端重试API调用。
这是日志,以防万一。
{
"name": "SequelizeConnectionError",
"parent": {
"errorno": "ETIMEDOUT",
"code": "ETIMEDOUT",
"syscall": "connect",
"fatal": true
},
"original": {
"errorno": "ETIMEDOUT",
"code": "ETIMEDOUT",
"syscall": "connect",
"fatal": true
}
}
答案 0 :(得分:7)
因此,在进行更多挖掘之后,您似乎可以使用options对象上的DialectOptions属性将内容传递给基础连接。
dialectOptions: {
connectTimeout: 60000
}
这似乎可以解决问题。