MongoDB Java驱动程序:autoConnectRetry

11

我们当前的连接配置如下:

MongoClientOptions.builder()
    .autoConnectRetry(true).maxAutoConnectRetryTime(1200000)
    .socketTimeout(30000).connectTimeout(15000).build();
     // SocketTimeout: 30s, ConnectionTimeout 15s, ReconnectRetry: 20min

autoConnectRetrymaxAutoConnectRetryTime在当前版本中已被弃用(源代码)并将被移除:"这个方法没有替代品。请使用connectTimeout属性来控制连接超时时间。"

我认为重试和连接超时是两件不同的事情。有人知道为什么要更改,这对内部有什么影响吗?


他们可能认为,重新尝试失败的连接价值有限。 - jgitter
我们遇到了一些小的网络故障,连接会在没有配置的情况下停止,但如果按照示例进行配置,则可以重新连接。 - xeraa
嗯,那很有趣。不幸的是,现在看来你将不得不在自己的项目中设置连接重试。祝你好运! - jgitter
1个回答

24

关于autoConnectRetry的含义曾经引起了很多混淆。大多数人认为,如果由于IOException而导致操作失败,驱动程序会重试操作直到maxAutoConnectRetryTime过期。但事实并非如此。

它只意味着,在调用Socket.connect()时,驱动程序会重试连接失败的尝试,直到maxAutoConnectRetryTime过期。但这恰恰是connectTimeout的作用。autoConnectRetry的唯一附加功能是您可以指定比底层操作系统允许的更长的连接超时时间(通常强制执行最大连接超时时间,从而限制用户指定的值)。

由于这种混淆和该特性的缺乏价值,以及其他MongoDB驱动程序均不支持该特性,因此我们决定将其弃用(并在下一个主要版本中将其删除)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接