我正在使用3节点MongoDB副本集并使用Pymongo v3.3.1连接到它。
在测试AutoReconnect和ServerSelectionTimeout等错误的处理时,我发现我无法(安全/可靠地)控制引发AutoReconnect异常所需的时间。
如果我将参数serverSelectionTimeoutMS
实例化为MongoClient,例如设置为2000,我执行会在大约2秒内看到ServerSelectionTimeout异常返回。但是,当条件恰好触发自动重新连接时,它总是需要至少20秒,有时接近30秒!
如何限制此行为?我正在拍摄相对较高的可用性,并希望检测网络/副本设置异常并快速启动我的重试逻辑。
答案 0 :(得分:0)
事实证明,经过一些修补,使用MongoClient参数socketTimeoutMS
,如果设置为比AutoReconnect观察到的更快,将取代AutoReconnect。
与我最初的担忧相反,这不会影响长时间运行的查询,因为套接字连接正常。
我发现在由于此设置而引发第一个NetworkTimeout异常后,可能需要10秒左右再次尝试。这也是通过将connectTimeoutMS
参数传递给MongoClient来解决的,很可能与socketTimeoutMS
的值相同。
如果有人发现此解决方案的任何警告,请在此处发布回复。