【问题标题】:Is it OK to create 2 instances of C# MongoClient connecting to the same replica set?是否可以创建 2 个连接到同一副本集的 C# MongoClient 实例?
【发布时间】:2020-02-18 13:15:17
【问题描述】:

我曾经从官方驱动创建一个MongoClient的实例,并在DI中注册为单例。但是现在因为设计问题,我不得不在另一个地方创建另一个 MongoClient 实例来连接到同一个副本集。

有没有潜在的问题?两个实例将使用相同的连接还是创建两个单独的连接?

项目是用 ASP.NET Core 3.1 编写的
MongoDB驱动2.8版
MongoDB服务器使用4.2

【问题讨论】:

  • 我无法验证这一点,但我了解到,如果多个MongoClients 使用完全相同的设置集,c# 驱动程序将为多个MongoClients 使用相同的连接池。如果您需要验证,则必须查看 github 上的驱动程序源或查看 mongodb 日志。它应该显示为每个客户端打开了多少个连接。
  • 正如我在constructor 中看到的MongoClient 确保它使用相同的集群,所以我认为应该是安全的。
  • 它使用相同的集群,或者根据@ViacheslavShchupak 已经提到的需要创建一个集群。

标签: c# mongodb mongodb-.net-driver


【解决方案1】:

目前,如果所有客户端选项都相同,它将起作用,因为底层 mongo 客户端的数据存储在集群级别。正如上面 cmets 中提到的,每次创建新客户端时,mongoClient 构造函数都会尝试从静态存储中检索这些数据。

但是,有一个限制,您的 MongoClientSettings 不应包含已配置的 ClusterConfigurator 选项。否则,它将导致创建两个不同的集群,其中包含所有相关的东西,例如连接池。

另外,请参阅此处的Re-use 部分:https://mongodb.github.io/mongo-csharp-driver/2.10/reference/driver/connecting/

【讨论】:

    猜你喜欢
    • 2017-06-13
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多