1. HttpClient 简介
HttpClient 是Apache的一个子项目,是可以提供支持HTTP协议的Java客户端编程工具包。在实际项目的使用过程中,经常都是多线程访问,因此可能存在多个线程都需要调用HttpClient对象的情况,这类似于数据库连接,所以我们需要对连接进行池化管理,以便于提高性能。
HttpClient从4.2开始抛弃了先前的SingleClientConnManager
和ThreadSafeConnManger
,取而代之的是BasicClientConnectionManager
和PoolingClientConnectionManager
,本文使用的是HttpClient 4.5 版本。
2. 编码和测试
2.1 创建PoolingHttpClientConnectionManager
PoolingHttpClientConnectionManager实现了HttpClientConnectionManager接口,顾名思义,它就是用来对连接进行池化管理的,首先创建一个对象,并在类加载时初始化它:
public class HttpClientTest {
// 池化管理
private static PoolingHttpClientConnectionManager poolConnManager = null;
private static CloseableHttpClient httpClient;
//请求器的配置
private static RequestConfig requestConfig;
static {
try {
System.out.println("初始化HttpClientTest~~~开始");
SSLContextBuilder builder = new SSLContextBuilder();
builder.loadTrustMaterial(null, new TrustSelfSignedStrategy());
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
builder.build());
// 配置同时支持 HTTP 和 HTPPS
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory> create().register(
"http", PlainConnectionSocketFactory.getSocketFactory()).register(
"https", sslsf).build();
// 初始化连接管理器
poolConnManager = new PoolingHttpClientConnectionManager(
socketFactoryRegistry);
// 将最大连接数增加到200,实际项目最好从配置文件中读取这个值
poolConnManager.setMaxTotal(200);
// 设置最大路由
poolConnManager.setDefaultMaxPerRoute(2);
// 根据默认超时限制初始化requestConfig
int socketTimeout = 10000;
int connectTimeout = 10000;
int connectionRequestTimeout = 10000;
requestConfig = RequestConfig.