【问题标题】:How to set connections-per-host setting in MongoClientSettings?如何在 MongoClientSettings 中设置每个主机的连接数设置?
【发布时间】:2019-06-07 15:57:35
【问题描述】:
【问题讨论】:
标签:
java
mongodb
reactive
【解决方案1】:
我相信 connectionsPerHost 参数已更改为 ConnectionPoolSettings.maxSize,作为新 MongoDB 驱动程序设计的一部分。请加一点盐,因为我还没有测试它是否是一个完全等效的选择。
threadsAllowedToBlockForConnectionMultiplier的描述如下,来自MongoClientSettings.getConnectionPoolSettings()异步驱动的MongoDB文档:
在设置对象中获取连接提供程序的设置。此设置对象包装了 minConnectionPoolSize、maxConnectionPoolSize、maxWaitTime、maxConnectionIdleTime 和 maxConnectionLifeTime 的值,并使用 maxConnectionPoolSize 和 threadsAllowedToBlockForConnectionMultiplier 来计算 maxWaitQueueSize。
这种行为可以在ConnectionPoolSettings.applyConnectionString() 中观察到:
maxWaitQueueSize(threadsAllowedToBlockForConnectionMultiplier * maxSize);
与原始MongoClientOptions.getThreadsAllowedToBlockForConnectionMultiplier() 的描述相比,此行为似乎相似:
这个乘数与connectionsPerHost 设置相乘,给出了可能正在等待池中可用连接的最大线程数。所有其他线程将立即获得异常。例如,如果 connectionsPerHost 为 10,threadsAllowedToBlockForConnectionMultiplier 为 5,则最多可以有 50 个线程等待连接。
【解决方案2】:
更新,在 4.4.X 中 maxWaitQueueSize 消失了(在 3.12.X 中它也被标记为 @deprecated),
我认为maxConnecting 已经替换了它,
因此,如果您仍在使用旧逻辑的maxWaitQueueSize,则 maxConnecting 的值应与上一个答案中的一样
maxConnecting = maxWaitQueueSize(threadsAllowedToBlockForConnectionMultiplier * maxSize);