0

我正在使用 Mongo Java 驱动程序 (2.8.0) 连接到 Mongo 实例。

我注意到,如果我重新启动 mongod,那么重新启动后的第一个操作(即使是简单的 count())总是会因 EOFException 或 Broken 管道而失败。

我正在使用以下 Mongo 选项:

opts.autoConnectRetry = true;
opts.maxAutoConnectRetryTime = 2000L;
opts.connectTimeout = 30000;
opts.socketTimeout = 60000;

有没有办法告诉驱动程序尝试重新建立连接?我认为“autoReconnectRetry”会做到这一点,但这只有在连接被“发现”(通过单个失败的操作)被破坏后才有效。

4

1 回答 1

1

AutoConnectRetry选项将在打开与服务器的连接时重试,但不能保证您不会收到读取异常。您仍然需要处理应用程序中的异常并在适当时重试。

来自文档的模糊:

如果为 true,驱动程序将继续尝试连接到同一服务器,以防套接字无法建立。持续重试的最长时间,默认为 15 秒。这对于通过阻止操作来避免在服务器暂时关闭时引发一些异常很有用。平滑过渡到新的主节点也很有用(以便在重试时间内选出新的主节点)。请注意,当使用此标志时: - 对于副本集,驱动程序将尝试连接到旧主服务器,而不是立即故障转移到新主服务器 -这不会阻止在读/写中引发异常套接字上的操作,必须由应用程序处理. 即使此标志为假,驱动程序也已经具有自动重新创建断开连接并重试读取操作的机制。默认为假。

于 2012-08-09T07:20:36.923 回答