我正在尝试使用PoolingHttpClientConnectionManager和ClosableHttpClient for HTTPS创建具有单个连接的连接池,并重用它

时间:2019-06-27 16:10:10

标签: ssl apache-httpclient-4.x

尝试创建连接池,其中将仅创建单个HTTPS连接,并且在后续请求到来时将使用先前的连接池。当前,当我每次建立新连接并且以前的连接进入时间等待状态时,尝试尝试任何请求时。

在我正在使用的代码段下方,它适用于HTTP连接,但不适用于HTTPS

  SslConfigurator sslConfig = SslConfigurator.newInstance().keyStoreFile(this.connectionInfo.getKeyStorePath()).keyStorePassword(connectionInfo.getKeyStorePassword()).keyStoreType("JKS").trustStoreFile(this.connectionInfo.getKeyStorePath()).trustStorePassword(connectionInfo.getKeyStorePassword()).securityProtocol("TLS");
                logger.info("SSL CONFIG Accepted");
                sslContext = sslConfig.createSSLContext();
                SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext,NoopHostnameVerifier.INSTANCE);
                logger.info("SSL CONTEXT CREATED, Building Client" );

                Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory> create().register("https", sslsf).build();
                connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
                connManager.setMaxTotal(1);
                connManager.setDefaultMaxPerRoute(1);

                config = RequestConfig.custom().setConnectTimeout(60000).setConnectionRequestTimeout(60000).setSocketTimeout(60000).build();
                client = HttpClients.custom().setDefaultRequestConfig(config).setConnectionManager(connManager).build();

1 个答案:

答案 0 :(得分:0)

  

connManager.setMaxTotal(1);

我不确定您为什么认为这没有效果,因为这肯定会将池中的连接总数一次限制为一个。

但是在特定情况下,您应该使用BasicHttpClientConnectionManager而不是PoolingHttpClientConnectionManager