MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Hören Sie auf Wiederverbindungsereignisse im MongoDB-Treiber

Sicher kannst du. Grundsätzlich müssen Sie den EventEmitter jedoch auf einer niedrigeren Ebene anzapfen als im Wesentlichen vom MongoClient selbst.

Sie können deutlich erkennen, dass es solche Dinge gibt, da sie im "Logging" sichtbar sind, das im Treiber über die Einstellung eingeschaltet werden kann:

{ "loggerLevel": "info" }

Von da an geht es nur noch darum, den eigentlichen Quellenemitter anzuzapfen. Ich habe dies in der folgenden Auflistung getan und einen kleinen Trick hinzugefügt, um die aufgezählten Ereignisse von einem bestimmten ausgegebenen Ereignis zu erhalten, der zugegebenermaßen von mir selbst verwendet wurde, um dies aufzuspüren:

const MongoClient = require('mongodb').MongoClient;

function patchEmitter(emitter) {
  var oldEmit = emitter.emit;

  emitter.emit = function() {
    var emitArgs = arguments;

    console.log(emitArgs);

    oldEmit.apply(emitter, arguments);
  }

}


(async function() {

  let db;

  try {

    const client = new MongoClient();

    client.on('serverOpening', () => console.log('connected') );

    db = await client.connect('mongodb://localhost/test', {
      //loggerLevel: 'info'
    });

    //patchEmitter(db.s.topology);

    db.s.topology.on('close', () => console.log('Connection closed') );
    db.s.topology.on('reconnect', () => console.log('Reconnected') );


  } catch(e) {
    console.error(e)
  }

})()

Diese beiden Zuhörer haben also definiert:

    db.s.topology.on('close', () => console.log('Connection closed') );
    db.s.topology.on('reconnect', () => console.log('Reconnected') );

Werden ausgelöst, wenn die Verbindung getrennt wird und wenn eine Wiederverbindung erreicht wird. Es gibt auch andere Dinge wie Wiederverbindungsversuche, die ebenfalls im Ereignis-Emitter stehen, genau wie Sie es beim loggerLevel sehen würden Einstellung aktiviert.