我正在使用Mongo Java驱动程序(2.8.0)连接到Mongo实例。
我注意到如果我重新启动mongod,那么重启后的第一个操作(即使是一个简单的count())总是因EOFException或Broken管道而失败。
我正在使用以下Mongo选项:
opts.autoConnectRetry = true;
opts.maxAutoConnectRetryTime = 2000L;
opts.connectTimeout = 30000;
opts.socketTimeout = 60000;
有没有办法告诉司机尝试重新建立连接?我认为“autoReconnectRetry”会这样做,但只有在“发现”(通过一次失败的操作)连接被破坏后才能工作。
答案 0 :(得分:1)
打开与服务器的连接时,AutoConnectRetry选项将重试,但不保证您不会获得读取异常。您仍然需要在应用程序中处理异常,并在适当时重试。
来自文档的Blurb:
如果为true,则在无法建立套接字的情况下,驱动程序将继续尝试连接到同一服务器。保留重试的时间最长,默认为15秒。这可以用于避免在服务器暂时关闭时通过阻止操作引发某些异常。平滑到新主控的转换也很有用(以便在重试时间内选出新的主控)。请注意,使用此标志时: - 对于副本集,驱动程序将尝试连接到旧主服务器,而不是立即故障转移到新主服务器 - 这不会阻止异常被抛出套接字上的读/写操作,必须由应用程序处理。即使此标志为false,驱动程序也已具有自动重新创建断开的连接并重试读取操作的机制。默认为false。