【问题标题】:MongoDB Atlas Cluster connections are always cappedMongoDB Atlas Cluster 连接总是有上限
【发布时间】:2021-01-05 11:08:34
【问题描述】:

我在后端使用 express 服务器、猫鼬和 MongoDB Atlas。我的应用程序托管在 heroku 上。 我在服务器引导程序上只打开一次连接:

db()
  .then(() => {
    console.log('Connected to the database')
  })
  .catch((err) => {
    console.log(err);
  });

db() 看起来像这样:

function db() {
  return new Promise(function(resolve, reject) {

    mongoose.connect(process.env.ATLAS_URI, {useNewUrlParser: true, poolSize: 25});

    mongoose.connection.once('open', function() {
      console.log('open')
      resolve("Connection has been made.");
    });

    mongoose.connection.on('error', function(error) {
      reject("Connection error: " + error.message);
    })
  })
}

然后,在短短 2 小时内,我打开了 500 个连接,这导致 Atlas 出错。 重新启动测功机有帮助,但我不能每 2 小时执行一次。 它可能是什么,我该如何解决这个问题?

【问题讨论】:

  • 你是打开连接而不是关闭它们,最终你达到了连接限制。
  • 感谢您的回答。我读过不关闭连接是一个好习惯。无论如何,在代码中关闭它的正确位置是什么?
  • 每个进程通常会有一个未完成的连接。你显然赚的更多了。
  • 嗯,一旦我的服务器启动,连接功能就会执行,就是这样。我不知道为什么它会再次执行。

标签: node.js mongodb heroku mongoose mongodb-atlas


【解决方案1】:

@Michael Kutateladze 由于您在使用后没有关闭连接,因此对您的应用程序的并发请求数正在创建更多连接并导致超过 MongoDB Atlas 连接限制。因此,重要的是您要么在使用后关闭逻辑中的连接,要么去创建一个连接池以即兴使用用例。

同样,超过 Atlas 集群的连接限制可能有多种原因,并且 Atlas 层根据集群大小有不同的连接限制。因此,较大的集群层将具有更高的连接限制。因此,如果它影响您的应用程序和生产中的连接限制,所有这些都值得考虑。

连接池逻辑示例:

var express = require('express');
var mongodb = require('mongodb');
var app = express();

var MongoClient = require('mongodb').MongoClient;
var db;  //reusable db instance

// Initialize connection once
MongoClient.connect("mongodb://localhost:27017/integration_test", function(err, database) {
  if(err) throw err;

  db = database;

  // Make sure you start the application after the database connection is ready
  app.listen(3000);
  console.log("Listening on port 3000");
});

// Reuse database object in request handlers like below
app.get("/", function(req, res) {
  db.collection("replicaset_mongo_client_collection").find({}, function(err, docs) {
    //code here
  });
});

【讨论】:

  • 谢谢! “确保在数据库连接准备好后启动应用程序”解决了问题
猜你喜欢
  • 2019-05-27
  • 2020-09-27
  • 2018-12-26
  • 2020-08-16
  • 2020-04-06
  • 2019-10-23
  • 2019-10-31
  • 1970-01-01
  • 2019-06-08
相关资源
最近更新 更多