sql >> Databasteknik >  >> NoSQL >> MongoDB

Lyssna på återanslutningshändelser i MongoDB-drivrutinen

Så klart du kan. I princip måste du använda EventEmitter på en lägre nivå än i princip från MongoClient sig själv.

Du kan tydligt se att sådana saker finns eftersom de syns i "loggning", som kan slås på i drivrutinen via inställningen:

{ "loggerLevel": "info" }

Från och med det är det egentligen bara att knacka på själva källsändaren. Jag har gjort dessa i följande lista, samt inkluderat ett litet trick för att få de uppräknade händelserna från en given emitterad, som visserligen användes av mig själv för att spåra detta:

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)
  }

})()

Så de två lyssnarna definierade:

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

Kommer att avfyras när anslutningen avbryts och när en återanslutning har uppnåtts. Det finns också andra saker som återanslutningsförsök som också finns i händelsesändaren precis som du skulle se med loggerLevel inställningen påslagen.




  1. MongoDB-fråga i Spring-repository:begränsa antalet poster efter filter

  2. Distribuera MongoDB med Docker

  3. Hur den primära servern nere kommer att hanteras automatiskt i mongodb-replikering

  4. Ange flera kriterier för matriselement