HTTP 连接池 Java

问题描述

我在一个项目中工作,该项目使用 Spring Boot 作为框架并通过 webservicetemplate 在 HTTP 1.1 协议上进行 SOAP 调用。 我已经实现了这样的 HTTPClient

@Bean
public PoolingHttpClientConnectionManager poolingConnManager() {
    
    PoolingHttpClientConnectionManager ret = new PoolingHttpClientConnectionManager();
    ret.setDefaultMaxPerRoute(5);
    ret.setMaxTotal(10);
    
    return ret;
}

@Bean
public CloseableHttpClient httpClient(PoolingHttpClientConnectionManager poolingConnManager) {
    
    CloseableHttpClient ret = HttpClients.custom()
            .addInterceptorFirst(this.requestHeaderInterceptor)
            .addInterceptorLast(this.requestInterceptor)
            .addInterceptorLast(this.responseInterceptor)
            .setConnectionManager(poolingConnManager)
            .setConnectionTimetoLive(60000L,TimeUnit.MILLISECONDS)
            .build();
    
    return ret;
}

我们知道多个 HTTP 请求/响应可以在单个 TCP 连接中传递,直到服务器或客户端关闭此 TCP 连接。 事实上,当我通过 CLI 或 WireShark 检查打开的连接时,我发现每个域只能打开一个连接,直到服务器关闭此连接,因此打开了一个全新的连接。 所以我的问题是:

  1. 真的有可能(尤其是客户端)打开连接池或重用关闭的连接吗? 如果是,上面代码片段中的问题是什么?我如何才能看到正在运行的连接池?

  2. 如果不是,PoolingHttpClientConnectionManager 的 API 的目的是什么?那么DB连接中著名的连接池呢?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...