使用无服务器Aurora时确定连接超时,以寻找增加超时时间或重试连接的方法

Sco*_*ter 7 mysql amazon-rds node.js serverless aws-aurora

我在尝试将无服务器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
    }
});
Run Code Online (Sandbox Code Playgroud)

还有几点要点:一旦数据库变热,那么一切都会正常运行。在技​​术上可行的情况下,保持数据库“热”状态会破坏将其作为无服务器db的意义(成本原因)。如果超时是连接错误,我愿意让我的客户端重试API调用。

这是日志,以防万一。

{
"name": "SequelizeConnectionError",
"parent": {
    "errorno": "ETIMEDOUT",
    "code": "ETIMEDOUT",
    "syscall": "connect",
    "fatal": true
},
"original": {
    "errorno": "ETIMEDOUT",
    "code": "ETIMEDOUT",
    "syscall": "connect",
    "fatal": true
}
}
Run Code Online (Sandbox Code Playgroud)

Sco*_*ter 10

因此,在进行更多挖掘之后,您似乎可以使用options对象上的DialectOptions属性将内容传递给基础连接。

dialectOptions: {
  connectTimeout: 60000
}
Run Code Online (Sandbox Code Playgroud)

这似乎可以解决问题。