sql >> データベース >  >> NoSQL >> MongoDB

MongoDBドライバーで再接続イベントをリッスンする

    できますよ。基本的には、基本的にMongoClientよりも低いレベルでEventEmitterを利用する必要があります。

    設定を介してドライバーでオンにできる「ログ」に表示されるため、このようなものが存在することがはっきりとわかります。

    { "loggerLevel": "info" }
    

    それ以降は、実際のソースエミッターを利用するだけです。私は次のリストでこれらを実行しました。また、特定の放出から列挙されたイベントを取得するためのちょっとしたトリックも含めました。これは、これを追跡するために私自身が使用したことは確かです。

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

    したがって、これら2つのリスナーは次のように定義されています。

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

    接続が切断されたとき、および再接続が達成されたときに起動します。 loggerLevelで表示されるのと同じように、イベントエミッターにもある再接続の試行などの他のものもあります。 設定がオンになっています。




    1. MongoDB-ユーザードキュメントにプロジェクトIDのリストを含める必要がありますか?

    2. rediscliを使用してコマンドのバッチを実行する

    3. フィールドで$dateFromStringを使用する場合、結果にnullフィールドが含まれないようにしてください

    4. SpringBootはMysqlとMongoDbを接続します