Does mongoDB have reconnect issues or am i doing it wrong?

后端 未结 6 1435
被撕碎了的回忆
被撕碎了的回忆 2020-12-04 07:53

I\'m using nodejs and a mongoDB - and I\'m having some connection issues.

Well, actually \"wake\" issues! It connects perfectly well - is super fast and I\'m general

6条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-12-04 08:35

    Thanks for all the help guys - I have managed to solve this issue on both localhost and deployed to a live server.

    Here is my now working connect code:

    var MONGO = {
        username: "username",
        password: "pa55W0rd!",
        server: '******.mongolab.com',
        port: '*****',
        db: 'dbname',
        connectionString: function(){
            return 'mongodb://'+this.username+':'+this.password+'@'+this.server+':'+this.port+'/'+this.db;
        },
        options: {
            server:{
                auto_reconnect: true,
                socketOptions:{
                    connectTimeoutMS:3600000,
                    keepAlive:3600000,
                    socketTimeoutMS:3600000
                }
            }
        }
    };
    
    var db = mongoose.createConnection(MONGO.connectionString(), MONGO.options);
    
    db.on('error', function(err) {
        console.log("DB connection Error: "+err);
    });
    db.on('open', function() {
        console.log("DB connected");
    });
    db.on('close', function(str) {
        console.log("DB disconnected: "+str);
    });
    

    I think the biggest change was to use "createConnection" over "connect" - I had used this before, but maybe the options help now. This article helped a lot http://journal.michaelahlers.org/2012/12/building-with-nodejs-persistence.html

    If I'm honest I'm not overly sure on why I have added those options - as mentioned by @jareed, i also found some people having success with "MaxConnectionIdleTime" - but as far as i can see the javascript driver doesn't have this option: this was my attempt at trying to replicate the behavior.

    So far so good - hope this helps someone.

    UPDATE: 18 April 2013 note, this is a second app with a different setup

    Now I thought i had this solved but the problem rose it's ugly head again on another app recently - with the same connection code. Confused!!!

    However the set up was slightly different…

    This new app was running on a windows box using IISNode. I didn't see this as significant initially.

    I read there were possibly some issues with mongo on Azure (@jareed), so I moved the DB to AWS - still the problem persisted.

    So i started playing about with that options object again, reading up quite a lot on it. Came to this conclusion:

    options: {
        server:{
            auto_reconnect: true,
            poolSize: 10,
            socketOptions:{
                keepAlive: 1
            }
        },
        db: {
            numberOfRetries: 10,
            retryMiliSeconds: 1000
        }
    }
    

    That was a bit more educated that my original options object i state. However - it's still no good.

    Now, for some reason i had to get off that windows box (something to do with a module not compiling on it) - it was easier to move than spend another week trying to get it to work.

    So i moved my app to nodejitsu. Low and behold my connection stayed alive! Woo!

    So…. what does this mean… I have no idea! What i do know is is those options seem to work on Nodejitsu…. for me.

    I believe IISNode uses some kind of "forever" script for keeping the app alive. Now to be fair the app doesn't crash for this to kick in, but i think there must be some kind of "app cycle" that is refreshed constantly - this is how it can do continuous deployment (ftp code up, no need to restart app) - maybe this is a factor; but i'm just guessing now.

    Of course all this means now, is this isn't solved. It's still not solved. It's just solved for me in my setup.

提交回复
热议问题