mongodb连接错误导致kubernetes pod挂起并重启pod解决了该问题

时间:2018-09-12 17:50:08

标签: node.js mongodb kubernetes

我有一个使用mongodb并在k8s上运行的nodejs应用程序。但是,每当我更改mogodb地址时,我都会遇到问题,k8s吊舱挂起,必须重新启动吊舱才能使其再次正常工作。因此,我认为是因为当时节点服务崩溃而发生的。 我如何编写我的代码以连接到mongodb,以使其在无法连接到mongodb或mondodb出现故障或发生故障时,它不会崩溃。 我当前的代码是

exports.connect = function() {
    return MongoClient.connect(mongourl);
};

1 个答案:

答案 0 :(得分: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之类的属性,但所有属性可能都不匹配。