5
我試圖在nodejs和mongodb服務器之間的連接丟失時發生「連接丟失」或類似情況。 我使用本地驅動程序,有以下代碼處理與nodejs的mongo數據庫丟失的連接
var mongo = require('mongodb');
var server = new mongo.Server('host', 'port', {
auto_reconnect: true,
socketOptions: {
keepAlive: 10,
connectTimeoutMS: 1000,
socketTimeoutMS: 0
}
});
var db = new mongo.Db(
'dbname',
server,
{
w: 1,
wtimeout: 1000,
numberOfRetries: 100,
auto_reconnect: true
}
);
db.on('close', function() {
console.log('Error...close');
});
db.on('error', function (err) {
console.log('Error...error', err);
});
db.on('disconnect', function (err) {
console.log('Error...disconnect', err);
});
db.on('disconnected', function (err) {
console.log('Error...disconnected', err);
});
db.on('parseError', function (err) {
console.log('Error...parse', err);
});
db.on('timeout', function (err) {
console.log('Error...timeout', err);
});
db.collection('collectionName',function(err, collection){
if(err){
console.log('Error...collection', err);
return;
}
// set breakpoint here and break connection to mongo db server
collection.insert({}, function (err, data) {
if (err) {
console.log('Error...insert', err);
}
console.log('Fine!');
});
});
無超時或錯誤apear約20分鐘,插件凍結。之後,我得到「錯誤...插入」連接丟失錯誤。
例如,我試圖設置socketTimeoutMS = 10000和keepAlive = 1,但是socketTimeoutMS在10000之後不斷上升「timeout」事件,並且不考慮keepAlive設置甚至查詢到mongodb。
此外,只有當我們連接到mongodb服務器並具有長時間查詢時,wtimeout纔有效。如果連接丟失,則不起作用。
因此,當我失去連接時,如何獲得事件或錯誤?或者減少20分鐘查詢凍結?
搜索關鍵詞:節點宕機下線斷開重新連接檢測通知監視狀態(這個回答把我永遠找) –
你知道這是在一個發射間歇性斷開/重新連接,還是僅在服務器脫機/無法訪問的情況下發生? – pospi