MongoDB Java驱动程序:autoConnectRetry

时间:2014-04-25 14:00:58

标签: 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属性来控制连接超时。"

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

1 个答案:

答案 0 :(得分:19)

关于autoConnectRetry的含义存在很多困惑。大多数人认为这意味着,如果操作因IOException而失败,驱动程序将重试该操作,直到maxAutoConnectRetryTime结束。但事实并非如此。

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

由于这种混淆,该功能缺乏价值,以及其他MongoDB驱动程序都没有支持此功能,我们决定弃用它(并在下一个主要版本中将其删除)。