Определите время ожидания соединения при использовании Alessra без сервера, ищите способ увеличить время ожидания или повторите попытку - PullRequest
0 голосов
/ 23 сентября 2018

У меня возникла проблема, когда я пытаюсь использовать базу данных Serverless 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
    }
});

Пара дополнительных моментов: если база данных прогрелась, то все работает отлично.Поддержание базы данных в «горячем» состоянии, хотя она и будет работать технически, отчасти сводит на нет необходимость иметь ее в качестве безсерверной базы данных (по соображениям стоимости).Я открыт для того, чтобы просто заставить моего клиента повторить вызов API в случае, если тайм-аут является ошибкой соединения.

Вот журналы на случай, если они вообще помогут.

{
"name": "SequelizeConnectionError",
"parent": {
    "errorno": "ETIMEDOUT",
    "code": "ETIMEDOUT",
    "syscall": "connect",
    "fatal": true
},
"original": {
    "errorno": "ETIMEDOUT",
    "code": "ETIMEDOUT",
    "syscall": "connect",
    "fatal": true
}
}

1 Ответ

0 голосов
/ 23 сентября 2018

Таким образом, после еще нескольких копаний похоже, что вы можете использовать опору dialectOptions на объекте параметров, чтобы передать вещи в базовое соединение.

dialectOptions: {
  connectTimeout: 60000
}

Это, похоже, делает свое дело.

...