MongoDB:使用CompositeServerSelector选择服务器30000ms后发生超时

时间:2016-12-01 03:48:50

标签: mongodb mongodb-.net-driver

我完全难过了。我使用的是最新的c#驱动程序(2.3.0.157)和最新的MongoDB(3.2)。数据库作为独立设置运行,没有复制或分片。我尝试在Windows上本地运行以及在Amazon LINUX上远程运行。

我继续得到超时错误但神秘地有时它只是有效(可能每20到30次尝试一次)。

我正在创建连接:

private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["MongoDB"].ToString();
private static readonly string DataBase = ConfigurationManager.ConnectionStrings["MongoDBDatabase"].ToString();

private static IMongoDatabase _database;


public static IMongoDatabase GetDatabase(string database)
{
    if (_database == null)
    {
        var client = new MongoClient(ConnectionString);
        _database = client.GetDatabase(database);

    }

    return _database;
}

并且这样称呼它:

public static List<Earnings> GetEarnings()
{
    var db = GetDatabase(DataBase);
    if (db == null) return new List<Earnings>();
    var logs = db.GetCollection<Earnings>("EarningsData");
    var all = logs.Find(new BsonDocument()).ToEnumerable().OrderBy(x => x.Symbol).ToList();
    return all;
}

它会在logs.Find部分方法上超时。这是完整的信息:

其他信息:

  

使用CompositeServerSelector选择服务器30000ms后出现超时{Selectors = ReadPreferenceServerSelector {ReadPreference = {Mode = Primary,TagSets = []}},LatencyLimitingServerSelector {AllowedLatencyRange = 00:00:00.0150000}}。群集状态的客户端视图是{ClusterId:&#34; 1&#34;,ConnectionMode:&#34; Direct&#34;,Type:&#34; Unknown&#34;,State:&#34; Disconnected&#34; ,服务器:[{ServerId:&#34; {ClusterId:1,EndPoint:&#34; XX.XX.XX.XX:27017&#34; }&#34;,EndPoint:&#34; XX.XX.XX.XX:27017&#34;,State:&#34; Disconnected&#34;,Type:&#34; Unknown&#34; }]}。

我尝试使用全限定主机名,将connect = direct和connect = replicaSet添加到连接字符串,使用MongoClientSettings而不是连接字符串以及我在论坛和StackOverflow上可能找到的所有其他内容。我不知所措,甚至不知道下一步该往下看。有什么建议吗?

我还应该补充一点,我可以通过命令行和RoboMongo轻松连接...

2 个答案:

答案 0 :(得分:1)

我们终于弄清楚如何解决这个问题,但我仍然不明白发生了什么。在我们的例子中,我们有一个服务器,可以生成~10个信号器集线器,从MongoDB获取数据。似乎当应用程序启动时,它正在快速调用MongoDB以获取初始数据集,虽然它偶尔会工作,但大多数情况下它没有。我们最终通过在加载每个SignalR集线器之间添加一秒延迟来解决这个问题,因此初始查询被延迟了一点,我们没有争用。

关于这一点的奇怪之处在于这些集合中没有一个具有大量数据,并且初始负载通常是&lt;每个集合100个文档(最多)。一旦初始化了事情,我们点击MongoDB的频率似乎并不重要。它似乎只是在初始负载。

答案 1 :(得分:0)

一个古老的话题,但是我发现遇到类似的错误(2.11.0-beta2, netcoreapp3.1),然后我意识到DocumentDb仅限于同一VPC内的连接。在这里提到。

decode this token

Amazon DocumentDB(具有MongoDB兼容性)集群部署在Amazon Virtual Private Cloud(Amazon VPC)中。可以在同一Amazon VPC中部署的Amazon EC2实例或其他AWS服务直接访问它们。此外,EC2实例或同一AWS区域或其他区域中不同VPC中的其他AWS服务可以通过VPC对等访问Amazon DocumentDB。

检查您是否在同一VPC中。如果没有的话,祝你好运。