接続が失敗した後にmongonodejsドライバーが再接続する方法を制御する2つの接続オプションがあります
- reconnectTries:#times(デフォルトは30回)の再接続を試みます
- reconnectInterval:サーバーは再試行の間に#ミリ秒待機します(デフォルトは1000ミリ秒)
mongoドライバードキュメントのリファレンス
つまり、mongoはデフォルトで30回接続を試み続け、すべての再試行の前に1秒待機します。そのため、30秒後にエラーが発生し始めます。
このサンプルのように、ニーズに基づいてこれら2つのパラメータを微調整する必要があります。
var MongoClient = require('mongodb').MongoClient,
f = require('util').format;
MongoClient.connect('mongodb://localhost:27017/test',
{
// retry to connect for 60 times
reconnectTries: 60,
// wait 1 second before retrying
reconnectInterval: 1000
},
function(err, db) {
var col = db.collection('t');
setInterval(function() {
col.insert({
a: 1
}, function(err, r) {
console.log("insert")
console.log(err)
col.findOne({}, function(err, doc) {
console.log("findOne")
console.log(err)
});
})
}, 1000)
});
これにより、デフォルトの30回ではなく60回試行されます。つまり、60秒後に再接続の試行が停止すると、エラーが発生し始めます。
補足:アプリ/リクエストが再接続期間の満了まで待機しないようにする場合は、オプションbufferMaxEntries: 0
を渡す必要があります 。この代償として、短いネットワークの中断中にもリクエストが中止されます。