Восстановление связей в 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);
            }
        }
    }
};
Другие вопросы по тегам