我使用一个3节点的MongoDB副本集,并使用Pymongov3.3.1连接到它。
在测试AutoReconnect和ServerSelectionTimeout等错误的处理过程中,我发现我无法(安全/可靠地)控制引发AutoReconnect异常所需的时间。
如果我实例化MongoClient,并将参数serverSelectionTimeoutMS设置为2000,则serverSelectionTimeoutMS do将在大约2秒内看到ServerSelectionTimeout异常返回。然而,当条件正好触发一个AutoReconnect时,总是需要至少20秒,有时接近30秒!
我怎样才能约束这种行为?我拍摄相对高可用性,并希望检测网络/复制集异常,并开始我的重试逻辑相当快。
发布于 2018-02-08 16:51:15
经过一些修补之后,事实证明,使用MongoClient参数socketTimeoutMS,如果设置为比AutoReconnect所观察到的更快的东西,将取代AutoReconnect。
与我最初关注的相反,这不会干扰长期运行的查询,因为套接字连接得很好。
我发现,在由于此设置引发第一个NetworkTimeout异常后,可能需要10秒左右才能再次尝试。这可以通过将connectTimeoutMS参数传递给MongoClient (很可能与socketTimeoutMS的值相同)来解决。
如果有人发现对此解决方案的任何警告,请在此发布回复。
https://stackoverflow.com/questions/48690736
复制相似问题