MongoDb驱动程序2-单例实例弹性

问题描述 投票:8回答:1

在连接弹性方面,是否有人有使用过MongoDB C#驱动程序(v2 +)和单例样式连接/集合实例的经验?

问题

我们最近已努力确保我们更广泛的基础架构的安全,基本上甚至在内部都通过SSL运行一切。因此,我们最近保护了我们的主要MongoDb集群之一。最直接的差异之一是连接集群的成本增加。我们的旧解决方案遵循典型的存储库模式,即消息的订阅者将实例化存储库,并在处理该消息后允许对其进行GCd之前建立连接。切换到SSL后,消息处理性能出现了相当大的下降-超出了我们的诚实预期!

问题

关于长寿命实例(周/月),是否存在与IMongoClientIMongoDatabaseIMongoCollection<T>结合使用的推荐方法。是否可以正常处理。]

  1. 特定节点在群集中出现故障(但是群集仍然可用)
  2. 整个集群离线(例如主要网络中断)
  3. 设置较大的超时时间等是否明智,会产生什么影响?

我目前的理解是,1.应该没问题,因为2.它试图在超时窗口内缓冲操作,并在群集再次可用后对其进行处理。 3.在很大程度上取决于操作的内存和及时性(我们需要在内部进行考虑)。

如果集群关闭的时间长于各种超时所允许的时间,则我假设抛出异常,在那一刻,我还假设我的实例将变得无用,除非我可以告诉驱动程序重试连接到集群无限期地对我来说,这似乎是文档和我自己研究的灰色领域-任何人都可以提供更多阅读材料或建议来解决这种情况下的网络故障等方法吗?

非常感谢,

c# mongodb ssl mongodb-.net-driver mongodb-csharp-2.0
1个回答
0
投票

回答我自己的问题。您应该尝试重用IMongoClient-理想情况下,它应该是单例。可以根据需要创建IMongoDatabaseIMongoCollection<T>。参见"Re-use" sections of the Mongo C# driver documentation

IMongoClient实现将维持与服务器的长期连接,并在网络出现故障时重新连接。

© www.soinside.com 2019 - 2024. All rights reserved.