我正在使用一个3节点MongoDB副本集,并使用pymongov3.3.1连接到它
在测试AutoReconnect和ServerSelectionTimeout等错误的处理时,我发现我无法(安全/可靠地)控制引发AutoReconnect异常所需的时间
例如,如果我用参数serverSelectionTimeoutMS
设置为2000来实例化MongoClient,我会看到ServerSelectionTimeout异常在大约2秒内返回。然而,当条件刚好触发自动重新连接时,它总是需要至少20秒,有时接近30秒
如何约束这种行为?我的目标是相对高的可用性,并希望检测网络/副本集异常,并迅速开始我的重试逻辑
经过一番修补之后,发现使用MongoClient参数
socketTimeoutMS
,如果设置为比AutoReconnect所观察到的更快的值,将取代AutoReconnect与我最初担心的相反,这不会干扰长时间运行的查询,因为套接字连接得很好
我发现,由于此设置引发第一个NetworkTimeout异常后,再次尝试可能需要10秒左右的时间。这可以通过将
connectTimeoutMS
参数传递给MongoClient来解决,该参数的值很可能与socketTimeoutMS
的值相同如果有人发现此解决方案的任何警告,请在此处发布回复
相关问题 更多 >
编程相关推荐