UPDATE: Tôi đang sử dụng phiên bản 2.1 trên người lái xe, chống lại 3,2Đáng tin cậy kết nối lại với MongoDB
Tôi có một ứng dụng nút đó sử dụng MongoDB. Vấn đề tôi gặp phải là nếu máy chủ MongoDB bị hỏng vì bất kỳ lý do gì, ứng dụng sẽ không kết nối lại. Để có được quyền này, tôi dựa trên các thử nghiệm của tôi trên mã số trong this official tutorial.
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)
});
Ý tưởng là chạy tập lệnh này, sau đó dừng lại mong muốn, sau đó khởi động lại. Vì vậy, ở đây chúng tôi đi:
TEST 1: dừng mongod trong 10 giây
Dừng MongoDB trong 10 giây thì kết quả mong muốn: nó sẽ ngừng chạy các truy vấn đối với những 10 giây, và sau đó sẽ chạy tất cả họ một khi máy chủ đã trở lại ip
NGHIỆM 2: dừng mongod trong 30 giây
Sau đúng 30 giây, tôi bắt đầu nhận được:
{ [MongoError: topology was destroyed] name: 'MongoError', message: 'topology was destroyed' }
insert
{ [MongoError: topology was destroyed] name: 'MongoError', message: 'topology was destroyed' }
Sự cố là từ lúc này, khi tôi khởi động lại mongod, kết nối không được tái xác định.
Giải pháp?
Vấn đề này có giải pháp không? Nếu vậy, bạn có biết nó là gì không? Khi ứng dụng của tôi bắt đầu nôn mửa "topo đã bị phá hủy", cách duy nhất để có được tất cả mọi thứ để làm việc một lần nữa là bằng cách khởi động lại toàn bộ ứng dụng ...
Bạn có thể được tiếp cận vấn đề này từ sai hướng. Dựa trên chuỗi kết nối, ứng dụng của bạn đang kết nối với một cá thể nút duy nhất của cơ sở dữ liệu. Nếu cần thời gian cho ứng dụng của bạn, bạn nên cân nhắc kết nối với một bản sao được thiết lập với nhiều nút mang dữ liệu. Trình điều khiển, nếu được định cấu hình đúng cách, sẽ tự động kết nối lại với nút Chính mới sau khi chuyển đổi dự phòng. –