ssl - 我正在尝试使用 PoolingHttpClientConnectionManager 和 ClosableHttpClient 为 HTTPS 创建具有单个连接的连接池并重用它
问题描述
尝试创建一个连接池,其中只会创建单个 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();
解决方案
connManager.setMaxTotal(1);
我不确定您为什么认为这没有效果,因为这绝对应该将池中的连接总数限制为一次只有一个。
但是,在您的特定情况下,您应该使用BasicHttpClientConnectionManager
而不是PoolingHttpClientConnectionManager
推荐阅读
- hash - 了解命令行 OpenSSL DGST Sha256 命令
- ios - 调用函数后如何导航到不同的内容页面
- web-scraping - 如何在scrapy spider运行时获取新的token headers
- view - 创建 DB2 视图时出错:规范 ORDER BY、OFFSET 或 FETCH 子句无效
- python - 如何使用 python 从存储在 AWS 的 Secrets Manager 中的私钥生成 OpenSSH RSA 密钥?
- node.js - Heroku 在部署时无法正确使用 NPM_CONFIG 变量
- .net - 是否可以在屏幕上的任何位置进行标注?
- android - 固定宽度 LinearLayout 的自动空间子项
- javascript - 如何更改函数内部变量的值
- amazon-web-services - aws_acm_certificate 似乎已更改其状态输出,可能是由于提供程序更新 - 我做错了吗?