【问题标题】:PoolingHttpClientConnectionManager for a single host/routePoolingHttpClientConnectionManager 用于单个主机/路由
【发布时间】:2018-10-20 20:21:42
【问题描述】:

所以我有一个 spring 应用程序,我使用 PoolingHttpClientConnectionManager 为从该应用程序发出的所有 http 请求创建一个连接池。我只有一个主机可以调用,这意味着只有一个路由。

 @Bean
      public PoolingHttpClientConnectionManager getPHCM() {
        PoolingHttpClientConnectionManager phcm = new PoolingHttpClientConnectionManager();
        phcm.setMaxTotal(50);
        phcm.setDefaultMaxPerRoute(50);
        return phcm;
      }

我想知道此配置是否会为我拥有的一条路线创建并保留所有 50 个连接?我发现设置 MaxPerRoute 值是多余的,但不确定这是否也是我的情况所需要的。

【问题讨论】:

    标签: java spring connection-pooling apache-httpclient-4.x resttemplate


    【解决方案1】:

    我想知道这个配置是否会创建并保留所有 50 个连接

    不,不会。只要连接池中有空间,HttpClient 就会保持持久连接,但不会主动创建连接。

    【讨论】:

    • 那么连接池是如何工作的呢?难道不应该主动保持这些连接准备好,以便每次有传入请求时都不需要打开和关闭连接?关于连接池,我不太明白您的回答
    • 池管理器不会主动预填充池。池在开始时总是空的。在每次请求执行后,池管理器确定释放回来的连接是否可以保持活动状态并重新使用。持久连接会一直保留在池中,直到它们过期或被任一端点关闭。
    • 所以你的意思是说在消费者线程释放后由httpclient创建的每个持久连接都会返回池并被另一个线程重用?那么这意味着池只有在由传入请求而不是主动创建时才会在其中查看连接?这是正确的理解吗?
    • 是的。这就是 HTTP 连接持久性的重点。
    • 另外,对于单条路线,根据我的配置,单条路线的最大计数是否为 50?
    猜你喜欢
    • 2023-03-22
    • 2013-11-10
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多