6

我有一个使用 MongoLab 附加组件托管在 Windows Azure 上的应用程序,我有一个问题,即应用程序在部署后运行良好,但是在几分钟不活动后,我得到一个数据库错误:

没有可用于使用 ReadPreference PRIMARY 查询的主副本集

在我重新启动返回相同模式的网站之前,此错误不会消失 - 在错误返回的空闲几分钟之前完美运行

我的基本应用程序代码:

mongoConnect(process.env.CUSTOMCONNSTR_MONGOLAB_URI, {
server: {
    auto_reconnect: true,
    socketOptions: {
        socketTimeoutMS: 120000,
        keepAlive: 1
    }
},
replSet: {
    socketOptions: {
        socketTimeoutMS: 120000,
        keepAlive: 1
    }
}
}).then(function (db) {
    //app configure ...

    http.createServer(app).listen(app.get('port'), function () {
        console.log("Express server listening on port " + app.get('port'));
    });
});

*mongoConnect 是 mongoclient.connect 的一个简单的“承诺”功能

我知道这是最佳实践,我正在建立一个与数据库的连接,然后为所有请求重用该数据库对象。通过阅读https://support.mongolab.com/entries/23009358-Handling-dropped-connections-on-Windows-Azure之类的内容,我将 sockettimeouts 设置为 2 分钟,以防止任何防火墙过早地杀死套接字并自动重新连接到true 所以他们重新连接,但是这两种设置都不能解决问题。

4

0 回答 0