可以创建两个连接到同一副本集的C#MongoClient实例吗?
我曾经从官方驱动程序创建一个可以创建两个连接到同一副本集的C#MongoClient实例吗?,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,我曾经从官方驱动程序创建一个MongoClient的实例,并将其作为单例在DI中注册。但是现在由于设计问题,我必须在另一个地方创建另一个MongoClient实例来连接到同一个副本集 有什么潜在的问题吗?这两个实例将使用相同的连接还是创建两个单独的连接 项目是用ASP.NET Core 3.1编写的 MongoDB驱动程序版本2.8 MongoDB服务器目前使用4.2,如果所有客户端选项都相同,它将工作,因为底层mongo客户端的数据存储在集群级别。正如上面的评论中提到的,mongoClient
MongoClient
的实例,并将其作为单例在DI中注册。但是现在由于设计问题,我必须在另一个地方创建另一个MongoClient实例来连接到同一个副本集
有什么潜在的问题吗?这两个实例将使用相同的连接还是创建两个单独的连接
项目是用ASP.NET Core 3.1编写的MongoDB驱动程序版本2.8
MongoDB服务器目前使用4.2,如果所有客户端选项都相同,它将工作,因为底层mongo客户端的数据存储在集群级别。正如上面的评论中提到的,mongoClient构造函数在每次创建新客户机时都会尝试从静态存储中检索此数据 但是,有一个限制,您的MongoClient设置不应包含已配置的ClusterConfigurator选项。否则,它将导致创建两个不同的集群,其中包含所有相关内容,例如连接池
另外,请参见此处的
Re use
部分:我无法验证这一点,但我已经了解到,如果多个MongoClient
s使用完全相同的设置,则c#驱动程序将使用相同的连接池。如果需要验证,您必须查看github上的驱动程序源代码,或者只查看mongodb日志。它应该显示每个客户端打开的连接数。正如我在MongoClient
中看到的,它确保使用相同的集群,因此我认为应该是安全的。它使用相同的集群,或者根据需要创建一个,正如前面提到的@ViacheslavShchupak。