2012-08-06 103 views
0

我正在使用Mongo Java驱动程序(2.8.0)连接到Mongo实例。Mongod重启后断开连接

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

我使用以下蒙戈选项:

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

有没有办法告诉司机试图重新建立连接?我认为“autoReconnectRetry”会做到这一点,但只有在连接被“发现”(通过一次失败的操作)被破坏之后,它才能起作用。

回答

1

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

的Blurb:

如果为true,则驱动程序将继续尝试连接的情况下,在同一台服务器的插座不能成立。保持重试的时间最长,默认为15秒。这对避免服务器因阻塞操作而临时关闭时引发的一些异常很有用。它也可以平滑过渡到一个新的主人(以便在重试时间内选出一个新的主人)。请注意,使用此标志时: - 对于副本集,驱动程序将尝试连接到旧版主,而不是立即故障转移到新副本 - 这不会防止异常被抛出读/在套接字上执行写操作,必须由应用程序处理。即使此标志为false,驱动程序也已具有自动重新创建断开连接并重试读取操作的机制。默认为false。

相关问题