public class HttpClient {
private static final Logger logger = LoggerFactory.getLogger(HttpClient.class);
private final static PoolingHttpClientConnectionManager POOLING_HTTP_CLIENT_CONNECTION_MANAGER;
private final static RequestConfig REQUEST_CONFIG;
private final static int MAX_TIMEOUT = 10 * 1000;
static {
// 设置连接池
POOLING_HTTP_CLIENT_CONNECTION_MANAGER = new PoolingHttpClientConnectionManager(createRegistry());
// 设置连接池大小
POOLING_HTTP_CLIENT_CONNECTION_MANAGER.setMaxTotal(100);
POOLING_HTTP_CLIENT_CONNECTION_MANAGER.setDefaultMaxPerRoute(POOLING_HTTP_CLIENT_CONNECTION_MANAGER.getMaxTotal());
RequestConfig.Builder requestConfigBuilder = RequestConfig.custom();
//客户端在向服务器发送数据的时候,不需要先向服务器发起一个请求看服务器是否愿意接受客户端将要发送的数据
requestConfigBuilder.setExpectContinueEnabled(false);
//设置Cookie策略
requestConfigBuilder.setCookieSpec(CookieSpecs.IGNORE_COOKIES);
// 设置连接超时
requestConfigBuilder.setConnectTimeout(MAX_TIMEOUT);
// 设置读取超时
requestConfigBuilder.setSocketTimeout(MAX_TIMEOUT);
// 设置从连接池获取连接实例的超时
requestConfigBuilder.setConnectionRequestTimeout(MAX_TIMEOUT);
REQUEST_CONFIG = requestConfigBuilder.build();
}
private static Registry<ConnectionSocketFactory> createRegistry() {
Registry<ConnectionSocketFactory> registry = null;
try {
SSLContextBuilder sslContextBuilder = new SSLContextBuilder();
sslContextBuilder.loadTrustMaterial(null, (x509Certificates, s) -> true);
SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContextBuilder.build(), NoopHostnameVerifier.INSTANCE);
registry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", new PlainConnectionSocketFactory())
.register("https", sslConnectionSocketFactory)
.build();
} catch (Throwable t) {
logger.error("创建org.apache.http.config.Registry<ConnectionSocketFactory>时发生异常", t);
}
return registry;
}
private static CloseableHttpClient createCloseableHttpClient() {
try {
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create
【httpclient连接池的实现】
于 2023-07-12 16:03:43 首次发布