2017-09-15 1 views
1

In dem Szenario, in dem Master/Replikat Postgres Verbindungen mit pg-promise erstellt werden, gibt es eine Möglichkeit, diese Verbindungen im Falle von Replica-Ausfällen neu erstellen?

Anstatt process.exitCode = 1; in der Fehlerfunktion übergeben mit den initOptions und Wiederaufbau nur funktionierende Verbindungen beim Start des Dienstes ... Gibt es eine bessere Möglichkeit, die fehlerhafte Verbindung zu entfernen (noch besser, wenn es ein Replikat und process.exitCode wenn es ist eine primäre)?Neuaufbau von Verbindungen in Nodejs, pg-promise

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 
+0

Kann ich 'pgp.end()' dann aber die Anwendung muss wissen, die Annahme von Verbindungen zu stoppen in der Zwischenzeit – Cmag

Antwort

1

Modul pg-promise wird auf node-postgres gebaut, die den Verbindungspool verwendet, kann automatisch unterbrochene Verbindungen wiederherzustellen.

Da ist nichts auf Ihrer Seite zu diesem Zweck benötigt. Sobald die Verbindung wieder verfügbar ist, werden Ihre Abfragen erneut erfolgreich ausgeführt.

Und nach der Logik, die Sie suchen, können Sie process.exit() insbesondere, wenn die primäre Verbindung verloren geht, während Ignorieren (oder nur Protokollierung) den Verlust der Replikatverbindung.

Vorausgesetzt, dass die zwei durch separate Database Objekte verwendet werden, können Sie sie mit Hilfe des dc Parameter unterscheiden - Database Context, die Sie während des Objekts Konstruktion passieren in kann, was alles sein kann.

Beispiel:

const dbPrimary = pgp(primaryConnection, 'primary'); 
const dbReplica = pgp(replicaConnection, 'replica'); 

dann in den globalen error Handler:

const initOptions = { 
    error: (err, e) => { 
     if(e.cn) { 
      // connectivity issue: 
      console.log(e.dc, 'connection error:', err); 
      if(e.dc === 'primary') { 
       process.exit(1); 
      } 
     } 
    } 
}; 
+0

Super. Vielen Dank für die Erklärung :). Für die Instanzen von pg-promise, die mit einer fehlerhaften Replikatverbindung sprechen, schlagen die Clientanforderungen fehl. Daher sollten wir entweder sicherstellen, dass ein anderes Replikat als sofortiger Wiederholungsversuch abgefragt wird, oder in der Tat process.exit auch bei Replika-Ausfällen. – Cmag

Verwandte Themen