MongoDB 连接错误导致 Kubernetes Pod 挂起,重新启动 Pod 可以解决此问题



我有一个使用mongodb并在k8s上运行的nodejs应用程序。但是每当我更改 mogodb 地址时,我都会遇到问题,k8s pod 挂起,我必须重新启动到 pod 才能使其再次工作。所以我认为发生这种情况是因为节点服务在那个时候崩溃。 我怎样才能编写我的代码来连接到 mongodb,以使 nodejs 应用程序在无法连接到 mongodb 或 mondodb 关闭或那里发生某些事情时不会崩溃。 我当前的代码是

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

所以,如果 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,你可以按照我处理的方式 error.in 我看到的Mongoclient Docs,它也支持回调。因此,您可能可以用相同的方式处理错误。像.connection这样的属性和所有这些可能不匹配。

最新更新