【问题标题】:Apache HttpClient Max-Connections-per-host BehaviourApache HttpClient Max-Connections-per-host 行为
【发布时间】:2020-04-08 18:34:39
【问题描述】:

我已经实现了一个 REST API ==>说 ServiceA 反过来又调用另一个远程 API ==>说 ServiceB 来获取数据。

ServiceA 通过 Apache HttpClient (V3.1) 调用 ServiceB

我完全理解以下属性:

DefaultMaxConnectionsPerHost

我已将上述属性配置为 10。

现在,根据文档:

定义每个主机配置允许的最大连接数。 这些值仅适用于来自特定实例的连接数 HttpConnectionManager。

到目前为止,理论运作良好。
对于ServiceB,我们假设以下几点。

  1. 场景 1(ServiceB 有单个应用服务器实例)

直截了当。在任何给定时间点,最多可以有 10 个从 ServiceA 到 ServiceB 的并发连接。

  1. 场景 2(ServiceB 有多个应用服务器实例)

由于 ServiceB 有多个 Host 将可能有超过 10 个来自 ServiceA 的并发连接? 要么 DefaultMaxConnectionsPerHost会根据ServiceB的域名来识别。

另外,为ServiceB配置负载均衡器会有什么不同吗?

提前致谢。

【问题讨论】:

    标签: java apache rest httpclient connection-pooling


    【解决方案1】:

    我猜你自己已经回答了你的问题。 根据文档,DefaultMaxConnectionsPerHostHostConfiguration 维护,如下所述:https://hc.apache.org/httpclient-legacy/apidocs/org/apache/commons/httpclient/HostConfiguration.html

    因此,粒度将正是您用于构建HostConfigurations 的粒度。 IE。如果您使用一个单独的 dns 名称来访问该服务,您将获得与该服务的完全 DefaultMaxConnectionsPerHost 连接。如果您对每个服务instance 使用一个 dns 名称甚至 IP 地址,您将获得最大连接数倍。

    同样适用于负载平衡器。但请注意,如果您还通过相同的负载均衡器(由相同的 dns 名称引用)访问服务 C - 在这种情况下,服务 A 仍将仅与 DefaultMaxConnectionsPerHost 连接(总计)服务 B 和 C 连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-03
      • 2012-04-29
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 2012-08-19
      相关资源
      最近更新 更多