HttpComponents PoolingHttpClientConnectionManager maxPerRoute和maxTotal?

jam*_*mes 8 java multithreading apache-httpcomponents

有人可以向我解释一下参考HttpComponents PoolingHttpClientConnectionManager的内容setMaxPerRoute(max) setMaxTotal(max)做法吗?

Jk1*_*Jk1 22

这些设置控制连接池大小.

  • setMaxTotal(max) 定义连接池的总连接限制.
  • setMaxPerRoute(max)定义每个HTTP路由的连接限制.在简单的情况下,您可以将其理解为每个目标主机限制.在引擎盖下,事情更有趣:HttpClient维护一些HttpRoute对象,每个对象代表一个主机链,如proxy1 -> proxy2 -> targetHost.连接按路由汇集.在简单的情况下,当您使用默认路由构建机制并且不提供代理支持时,您的路由可能仅包括目标主机,因此每个路由连接池限制实际上变为每个主机限制.

例:

假设你有setMaxPerRoute(5)setMaxTotal(20).这意味着您可以同时为每个目标主机使用最多5个连接:5个与google.com的连接,另外5个与oracle.com的连接,依此类推.但是,无论您正在与之通信的主机数量是多少,打开的连接总量都不能超过20.