mongoDB native node.js驱动程序无限重新连接尝试

时间:2015-02-08 22:24:33

标签: node.js mongodb

在我的测试中,我使用以下node.js脚本:

var mongo = require('mongodb');
var Promise = require('bluebird');

Promise.promisifyAll(mongo);

var mongoCollection;

function query() {
    mongoCollection.findAsync({}, { limit: 2 })
    .then(function (cursor) {
        return cursor.toArrayAsync();
    })
    .then(function (records) {
        console.log("got data");
    })
    .catch(function (e) {
        console.log("promise error: " + e);
    });
}

function connect() {
    mongo.MongoClient.connectAsync('mongodb://127.0.0.1:27017/test', {
        server: {
            auto_reconnect: true
        }
    })
    .then(function (db) {
        mongoCollection = db.collection("users");

        setInterval(function () {
            query();
        }, 2000);

        db.on('error', function () { 
            console.log("db error");
        });

    }).catch(function (e) {
        console.log("connection error: " + e);
    });
}

connect();

它每2秒打印一次“获取数据”,直到我关闭mongoDB服务器。此时,驱动程序尝试重新连接(auto_reconnect:true)。但是,它发生在无限循环中。看一下驱动程序源代码,我在/lib/mongodb/connection/server.js中看到,有一个函数__attemptReconnect。它会调用自身,直到配置的重新连接尝试次数完成。之后,它会发出“错误”事件。此事件在连接池级别捕获。连接池重置重新连接尝试计数器并再次调用此功能。等等,直到服务器再次启动。

这似乎是一个微不足道的用例。如果重新连接尝试在几秒钟内没有成功,我希望我的数据库客户端收到错误。没有解决方案的解决方案,只使用适当的设置是否可能?我只是错过了一些东西吗?我知道那里有类似的问题,但我没有找到任何答案。

0 个答案:

没有答案