MongoDB - 获取服务器连接的等待队列已满

MongoDB - The wait queue for acquiring a connection to server is full

我正在使用以下代码连接 mongo 数据库。

public static class MongoDBHandler
{
    static IMongoClient _client;
    static IMongoDatabase _database;
    static string MongoDBConnectionString;

    static IMongoClient mClientConnection()
    {
        MongoDBConnectionString = System.Configuration.ConfigurationManager.AppSettings["connectionString"];
        _client = new MongoClient(MongoDBConnectionString);
        return _client;
    }

    public static IMongoDatabase mDatabase()
    {
        try
        {
            if (_client == null)
            {
                _client = mClientConnection();
            }

            if (_database == null)
            {
                var mongoUrl = new MongoUrl(MongoDBConnectionString);
                _database = _client.GetDatabase(mongoUrl.DatabaseName);
            }
            return _database;
        }
        catch
        {
            throw;
        }
    }
}

我正在使用上面的 class 代码,如下所示:-

protected static IMongoDatabase _database;

public void GetData()
{
    _database = Assistant.MongoDBHandler.mDatabase();
    IMongoCollection<Models.RoomTypeMappingOnline> collection_rto = _database.GetCollection<Models.RoomTypeMappingOnline>("collection");
    //Rest of code
}

我的代码运行良好。我能够以更少的请求数毫无问题地获取数据。

但是当我收到更多请求时,我收到 "The wait queue for acquiring a connection to server is full" 错误。

下面是我的连接字符串:-

mongodb://admin:password@server:11111/databse?authSource=sa&appName=database&connectTimeoutMS=5000&minPoolSize=3000&retryWrites=true&waitQueueMultiple=15

请建议我可以对我的代码进行哪些更改,以便它可以正常工作。

我只是在 mongo 数据库连接中将 minPoolSize=3000 增加到 minPoolSize=5000。这将解决我的问题。

另请注意,如果您增加最小池大小,则 mongo 服务器 CPU 和内存利用率也会增加。所以你需要在增加大小之前监控它。