ОБНОВЛЕНИЕ: Я использую версию 2.1 для драйвера, против 3.2
У меня есть приложение-приложение, которое использует MongoDB. Проблема заключается в том, что если сервер MongoDB по какой-либо причине опускается, приложение не будет повторно подключаться. Чтобы это исправить, я основывал свои тесты на коде в этом официальном учебнике.
var MongoClient = require('mongodb').MongoClient
, f = require('util').format;
MongoClient.connect('mongodb://localhost:27017/test',
// Optional: uncomment if necessary
// { db: { bufferMaxEntries: 3 } },
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)
});
Идея заключается в том, чтобы запустить этот скрипт, а затем остановить mongod, а затем перезапустить его. Итак, здесь мы идем:
ИСПЫТАНИЕ 1: остановка mongod на 10 секунд
Остановить MongoDb в течение 10 секунд делает желаемый результат: он прекратит выполнение запросов за эти 10 секунд, а затем запустит все из них, как только сервер вернется ip
TEST 2: остановка mongod на 30 секунд
Через ровно 30 секунд я начинаю получать:
{ [MongoError: topology was destroyed] name: 'MongoError', message: 'topology was destroyed' }
insert
{ [MongoError: topology was destroyed] name: 'MongoError', message: 'topology was destroyed' }
Проблема в том, что после этого, когда я перезапускаю mongod, соединение не восстанавливается.
Решения?
Имеет ли эта проблема решение? Если да, знаете ли вы, что это такое? Как только мое приложение начнет запугивать "топология была уничтожена", единственный способ заставить все работать снова - перезапустить все приложение...