Восстановление связей в Nodejs, pg-promise
В сценарии, где соединения master / replica postgres создаются с использованием pg-promise
Есть ли способ восстановить эти подключения в случае отключения реплики?
Вместо того чтобы делать process.exitCode = 1;
в функции ошибки, переданной с initOptions и перестраивающей только рабочие соединения при запуске службы... Есть ли лучший способ удалить сбойное соединение (даже лучше, если это реплика и process.exitCode, если он является основным)?
const initOptions = {
// global event notification;
error: (error, e) => {
if (e.cn) {
//log
}
process.exitCode =1;
}
};
//singleton
const pgp = require('pg-promise')(initOptions);
// then for each database in config, we connect and start the service
1 ответ
Модуль pg-обещает построен на верхнем узле postgres, который использует пул соединений, способный автоматически восстанавливать разорванные соединения.
С вашей стороны ничего не нужно для этого. Как только соединение снова станет доступным, ваши запросы снова начнут выполняться успешно.
И в соответствии с логикой, которую вы ищете, вы можете сделать process.exit()
в частности, когда основное соединение потеряно, игнорируя (или только регистрируя) потерю соединения с репликой.
При условии, что они используются через отдельные объекты базы данных, вы можете различать их с помощью dc
параметр - База данных Контекст, который вы можете передать во время создания объекта, который может быть любым.
Пример:
const dbPrimary = pgp(primaryConnection, 'primary');
const dbReplica = pgp(replicaConnection, 'replica');
Затем внутри глобального обработчика ошибок:
const initOptions = {
error: (err, e) => {
if(e.cn) {
// connectivity issue:
console.log(e.dc, 'connection error:', err);
if(e.dc === 'primary') {
process.exit(1);
}
}
}
};