【问题标题】:How to set connections-per-host setting in MongoClientSettings?如何在 MongoClientSettings 中设置每个主机的连接数设置?
【发布时间】:2019-06-07 15:57:35
【问题描述】:

阻塞 MongoDB 驱动程序有 MongoClientOptions,其中包含客户端设置。
反应式驱动程序的 MongoClients.create() 需要 MongoClientSettings 作为参数。
MongoClientOptions 中的大多数设置在 MongoClientSettings 中都有对应的设置。

但我在MongoClientSettings 中找不到connectionsPerHost 替代方案。
我错过了什么吗?

【问题讨论】:

    标签: 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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-30
        • 1970-01-01
        • 1970-01-01
        • 2016-04-30
        • 1970-01-01
        • 2015-11-08
        • 2017-05-10
        相关资源
        最近更新 更多