使用 Serverless Aurora 时 Sequelize 连接超时,寻找增加超时持续时间或重试连接的方法
Sequelize connection timeout while using Serverless Aurora, looking for a way to increase timeout duration or retry connection
我在尝试将无服务器 Aurora 数据库用作我的应用程序的一部分时遇到问题。
问题本质上是当数据库很冷时,建立连接的时间可能大于 30 秒(由于数据库旋转)——这似乎比 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
}
});
几点补充:
一旦数据库变暖,那么一切都会完美运行。
保留数据库 "hot",虽然它在技术上可行,但有点违背了将其作为无服务器数据库的意义(成本原因)。
如果超时是连接错误,我愿意让我的客户端重试 API 调用。
这是日志,以备不时之需。
{
"name": "SequelizeConnectionError",
"parent": {
"errorno": "ETIMEDOUT",
"code": "ETIMEDOUT",
"syscall": "connect",
"fatal": true
},
"original": {
"errorno": "ETIMEDOUT",
"code": "ETIMEDOUT",
"syscall": "connect",
"fatal": true
}
}
所以在进一步挖掘之后,您似乎可以使用选项对象上的 dialectOptions 属性将内容传递给底层连接。
dialectOptions: {
connectTimeout: 60000
}
这似乎可以解决问题。
我在尝试将无服务器 Aurora 数据库用作我的应用程序的一部分时遇到问题。
问题本质上是当数据库很冷时,建立连接的时间可能大于 30 秒(由于数据库旋转)——这似乎比 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
}
});
几点补充: 一旦数据库变暖,那么一切都会完美运行。 保留数据库 "hot",虽然它在技术上可行,但有点违背了将其作为无服务器数据库的意义(成本原因)。 如果超时是连接错误,我愿意让我的客户端重试 API 调用。
这是日志,以备不时之需。
{
"name": "SequelizeConnectionError",
"parent": {
"errorno": "ETIMEDOUT",
"code": "ETIMEDOUT",
"syscall": "connect",
"fatal": true
},
"original": {
"errorno": "ETIMEDOUT",
"code": "ETIMEDOUT",
"syscall": "connect",
"fatal": true
}
}
所以在进一步挖掘之后,您似乎可以使用选项对象上的 dialectOptions 属性将内容传递给底层连接。
dialectOptions: {
connectTimeout: 60000
}
这似乎可以解决问题。