mongodb连接错误导致kubernetes pod挂起并重新启动pod修复了该问题

问题描述 投票:1回答:1

我有一个nodejs应用程序,它使用mongodb并在k8s上运行。但是每当我更改mogodb地址时,我都会遇到问题,k8s pod会挂起,我将重新启动到pod以使其再次运行。所以我认为这是因为当时节点服务崩溃了。如何编写我的代码以连接到mongodb,方式是当nodejs应用程序无法连接到mongodb或mondodb失败或发生某些事情时不会崩溃。我目前的代码是

exports.connect = function() {
    return MongoClient.connect(mongourl);
};
node.js mongodb kubernetes
1个回答
0
投票

所以,你想要mongo连接失败。它不应该崩溃应用程序。你可以处理error回调并做任何你想做的事情。在我的情况下,我正在重新连接数据库,如果它失败了。如下:

    var mongoose = require('mongoose');
    var connection = mongoose.connection;    

    connection
      .on('error', function (err) {
        console.log("Error in MongoDB Connection");
        console.error(err);
      })
      .on('disconnected', reConnect)
      .once('open', listen);

    connection.on('reconnected', function () {
      console.log('MongoDB reconnected!');
    });

    function connect() {
              const connection = mongoose.connect(<mongo Uri here >, <connection options>,(err)=>{
                    reConnect();
                  });
              return connection;
        }

        function reConnect() {

          if (mongoose.connection.readyState == 0) {
            console.log(mongoose.connection.readyState);
            //you can just try to connect here now.
            // connect();
          }
          else {
            console.log("I am already Connected");
          }
        }
connect();
module.exports =  mongoose;

所以我在这里使用mongoose,你可以按照我处理错误的方式。我看到Mongoclient Docs,它也支持回调。所以你可以用同样的方式处理错误。像.connection这样的属性和所有这些可能不匹配。

© www.soinside.com 2019 - 2024. All rights reserved.