gpt4 book ai didi

c# - Mongo C# 驱动程序在连接失败时尝试重新连接

转载 作者:可可西里 更新时间:2023-11-01 10:04:23 26 4
gpt4 key购买 nike

在使用 C# 驱动程序的 MongoDB 中,是否有一种通用的方法可以从连接错误中恢复?目前,如果关闭 MongoDB,我的 Windows 服务就会关闭。目前,我的应用程序在我的 Windows 服务开始时的结构如下:

//Set up connections for Mongo
var con = new MongoConnectionStringBuilder(ConfigurationManager.ConnectionStrings["MongoDB"].ConnectionString);
var client = new MongoClient(con.ToString());
var server = client.GetServer();
var db = server.GetDatabase(con.DatabaseName);

然后我将 db 对象注入(inject)到我的存储库中。

我试图找到类似事件处理程序或我可以在我的整个应用程序中收听的条件,以防止在 mongo 因某种原因出现故障时导致整个服务崩溃。

最佳答案

根据 driver document 的建议, MongoClient 被添加来管理副本集的东西,你早晚会需要这些东西。为了避免当时的大量代码重构,您现在需要更好地利用它。线程安全的 MongoClient 已经实现了副本集节点之间的故障转移逻辑。它应该与您的应用程序域一起是单例的。因此,您可以注入(inject) MongoClient,而不是 db(它甚至不是线程安全的)。

所以总是重试 MongoClient 中的 GetServer()GetDatabase(),并尝试/捕获它们产生的异常,最终会给出当 MongoDB 再次联机时,你是可用的 db 对象。
关键是,MongoDB 不会通知客户它的在线,所以也没有这样的事件来通知你。您必须在客户端继续尝试,直到一切正常。并且为了避免异常导致服务中断,您必须捕获它们。

编辑:根据document,我对线程安全的看法是错误的.但是,这不会改变您不应该存储 MongoDatabase 以供将来迁移到副本集的事实。

关于c# - Mongo C# 驱动程序在连接失败时尝试重新连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23813538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com