Apache HttpClient PoolingHttpClientConnectionManager - 分配到最大值

问题描述 投票:0回答:1

我已经设置了具有 1000 个池的 PoolingHttpClientConnectionManager,但我不明白此日志:

[可用总数:1000;分配的路线:1000 条中的 1000 条;分配总数:1000 / 1000]

我怎么可能有 1000 个可用池和 1000 个(最多)已分配池? 我还设置了自己的KeepAliveStrategy为5s。我相信每 5 秒应该释放一个分配的。

我也找不到: [可用总数:0;分配的路线:1000 条中的 1000 条;分配总数:1000 / 1000] 所以我不知道我是如何获得完整分配的路线的。

值得一提的是,这个 httpclient 随后被传递到 HttpComponentsMessageSender,而那个 httpclient 被传递到 WebServiceTemplate => 进行 SOAP 调用。

尝试设置KeepAliveStrategy,但没有帮助。我仍然看到我有所有可用的池,但也分配到最大值

connection-pooling apache-httpclient-4.x keep-alive
1个回答
0
投票

池连接管理器通常强制执行两种类型的分配限制:

  1. 每个路由。此限制可确保单个路由不能超过指定的并发连接总数。
  2. 总计。 此限制确保所有路由的总和不能超过指定的并发连接总数。

在您的示例中,如果只有一条路由,则可以轻松地将所有可能的连接插槽分配给该唯一路由。

顺便说一句,如果一个人需要多个具有相同路由的并发连接(超过 20 个),那么就非常非常错误

© www.soinside.com 2019 - 2024. All rights reserved.