java - MongoDB Java 驱动程序 : autoConnectRetry

标签 java mongodb mongodb-java

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

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

autoConnectRetrymaxAutoConnectRetryTime 在当前版本 ( source code ) 中已弃用并将被删除:“此方法无法替代。使用 connectTimeout 属性控制连接超时。”

我认为重试和连接超时是两件事。有谁知道为什么会发生这种变化以及这有什么(内部)影响?

最佳答案

关于 autoConnectRetry 的含义有很多混淆。大多数人认为这意味着,如果由于 IOException 导致操作失败,驱动程序将重试操作,直到 maxAutoConnectRetryTime 结束。但事实并非如此。

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

由于这种困惑、该功能缺乏值(value)以及其他 MongoDB 驱动程序都不支持该功能这一事实,我们决定弃用它(并在下一个主要版本中将其删除)。

关于java - MongoDB Java 驱动程序 : autoConnectRetry,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23295333/

相关文章:

javascript - 批量发送电子邮件并捕获不成功的尝试

MongoDB:WriteResult.getN() 总是返回 0?

java - Socket 的 PrintWriter 在关闭之前不会发送

python - 使用 MongoDB 管理 Python 多处理

java - 在 StringBuilder 中分隔行

python - 如何从 python 中使用 mongolab 附加组件到 Heroku?

java - 检索 MongoDB 数据并将其存储在列表中

java - 使用正则表达式过滤器聚合 MongoDB Java 驱动程序

java - AspectJ AOP LTW 不适用于 javaagent 的动态加载

java - Java 中的 Date.getTime() 在不同的服务器中返回不同的时间