Java Http连接池封装
来源:互联网 发布:许昌自学考试网络报名 编辑:程序博客网 时间:2024/05/22 03:07
//基本参数package com.linoer.app.httppublic class HttpConfig {private int maxTotal=100;private int defaultMaxPerRoute=10;private int maxPerRoute=100;private int socketTimeout=5000;private int connectTimeout=50000;private int connectionRequestTimeout=5000;private String protocol="http";private boolean authentication=false;private boolean authType;private String keyStore;private String trustStore;private String keyStorepass;private String trustStorepass;private String algorithm;private String charSet="UTF-8";public int getMaxTotal() {return maxTotal;}public void setMaxTotal(int maxTotal) {this.maxTotal = maxTotal;}public int getDefaultMaxPerRoute() {return defaultMaxPerRoute;}public void setDefaultMaxPerRoute(int defaultMaxPerRoute) {this.defaultMaxPerRoute = defaultMaxPerRoute;}public int getMaxPerRoute() {return maxPerRoute;}public void setMaxPerRoute(int maxPerRoute) {this.maxPerRoute = maxPerRoute;}public int getSocketTimeout() {return socketTimeout;}public void setSocketTimeout(int socketTimeout) {this.socketTimeout = socketTimeout;}public int getConnectTimeout() {return connectTimeout;}public void setConnectTimeout(int connectTimeout) {this.connectTimeout = connectTimeout;}public int getConnectionRequestTimeout() {return connectionRequestTimeout;}public void setConnectionRequestTimeout(int connectionRequestTimeout) {this.connectionRequestTimeout = connectionRequestTimeout;}public String getProtocol() {return protocol;}public void setProtocol(String protocol) {this.protocol = protocol;}public boolean isAuthentication() {return authentication;}public void setAuthentication(boolean authentication) {this.authentication = authentication;}public boolean isAuthType() {return authType;}public void setAuthType(boolean authType) {this.authType = authType;}public String getKeyStore() {return keyStore;}public void setKeyStore(String keyStore) {this.keyStore = keyStore;}public String getTrustStore() {return trustStore;}public void setTrustStore(String trustStore) {this.trustStore = trustStore;}public String getKeyStorepass() {return keyStorepass;}public void setKeyStorepass(String keyStorepass) {this.keyStorepass = keyStorepass;}public String getTrustStorepass() {return trustStorepass;}public void setTrustStorepass(String trustStorepass) {this.trustStorepass = trustStorepass;}public String getAlgorithm() {return algorithm;}public void setAlgorithm(String algorithm) {this.algorithm = algorithm;}public String getCharSet() {return charSet;}public void setCharSet(String charSet) {this.charSet = charSet;}}//连接池的构建package com.linoer.app.http;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;/** * http连接池 */public class HttpPool {private PoolingHttpClientConnectionManager poolConnection = new PoolingHttpClientConnectionManager();private HttpConfig httpConfig ;private CloseableHttpClient httpclient;public void init(){poolConnection.setMaxTotal(httpConfig.getMaxTotal());poolConnection.setDefaultMaxPerRoute(httpConfig.getMaxPerRoute());poolConnection.setDefaultMaxPerRoute(httpConfig.getDefaultMaxPerRoute());this.httpclient = HttpClients.custom().setConnectionManager(poolConnection).build();}/** * 获取连接 */public CloseableHttpClient getHttpClient(){ return this.httpclient;}public HttpConfig getHttpConfig() {return httpConfig;}public void setHttpConfig(HttpConfig httpConfig) {this.httpConfig = httpConfig;}}
//发送请求
package com.linoer.app.http;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.IOException;import java.net.SocketTimeoutException;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.Set;/** * HTTP消息发送 */public class HttpSend { private Logger log = LoggerFactory.getLogger(getClass()); private HttpPool httpPool; /** * HTTP消息发送 * @param xml 报文参数 * @param url 发送地址 * @param charset 发送字符集 * @param maxSendTimes 最大发送次数 * @param sendIntervalTime 重复发送间隔时间 * @return TimeOut:超时标识 */ public String send(String xml, String url, String charset, int maxSendTimes, int sendIntervalTime, int type){ log.debug("Http Send,请求地址:" + url); log.debug("Http Send,字符集:" + charset); CloseableHttpClient httpClient = null; String retStr = ""; int sendTimes = 0; do { try { if (type == 0) { httpClient = httpPool.getHttpClient(); //http请求 } else { httpClient = HttpsPostUtil.createHttpsClient(); //https请求,发给基金公司 } HttpPost httpPost = new HttpPost(url); log.debug("Http Send,请求报文为:" + xml); StringEntity stringEntity = new StringEntity(xml, charset); httpPost.setEntity(stringEntity); httpPost.setConfig(getRequestConfig()); log.debug("Http Send,开始第" + (sendTimes + 1) + "次发送..."); HttpResponse httpResponse = httpClient.execute(httpPost); log.debug("Http Send,发送完成,总调用次数为:" + (sendTimes + 1) + "次"); HttpEntity responseEntity = httpResponse.getEntity(); retStr = EntityUtils.toString(responseEntity, charset); log.debug("Http Send,返回报文:" + retStr); EntityUtils.consume(responseEntity); int statusCode = httpResponse.getStatusLine().getStatusCode(); if (statusCode >= 200 && statusCode < 300) { log.debug("Http Send,第" + (sendTimes + 1) + "次调用成功,返回码为:[" + statusCode + "]"); break; } else { retStr = ""; log.error("Http Send,第" + (sendTimes + 1) + "次调用出错,返回码为:[" + statusCode + "]"); if (sendTimes + 1 <= maxSendTimes) { log.debug("Http Send," + (sendIntervalTime / 1000) + "秒后,重新发起请求..."); Thread.sleep(sendIntervalTime); } else { log.debug("Http Send,达到重发最大次数,退出程序!"); } } } catch (ClientProtocolException e) { log.error("Http Send,第" + (sendTimes + 1) + "次调用出错:ClientProtocolException", e); retStr = null; } catch (SocketTimeoutException e) { log.error("Http Send,第" + (sendTimes + 1) + "次调用出错: SocketTimeoutException", e); retStr = null; } catch (IOException e) { log.error("Http Send,第" + (sendTimes + 1) + "次调用出错: IOException", e); retStr = null; } catch (Exception e) { log.error("Http Send,第" + (sendTimes + 1) + "次调用出错", e); retStr = null; } finally { sendTimes++; } } while (sendTimes < maxSendTimes); return retStr; } /** * HTTP消息发送 * @param param 报文参数 * @param url 发送地址 * @param charset 发送字符集 * @param maxSendTimes 最大发送次数 * @param sendIntervalTime 重复发送间隔时间 * @return */ public String send(Map<String, String> param, String url, String charset, int maxSendTimes, int sendIntervalTime, int type) throws Exception { log.debug("Http Send,请求地址:" + url); log.debug("Http Send,字符集:" + charset); CloseableHttpClient httpClient = null; String retStr = ""; int sendTimes = 0; do { try { if (type == 0) { httpClient = httpPool.getHttpClient(); } //http请求 else { httpClient = HttpsPostUtil.createHttpsClient(); }//https请求,发给基金公司 HttpPost httpPost = new HttpPost(url); log.debug("Http Send,请求报文为:" + param); List<NameValuePair> formParams = new ArrayList<NameValuePair>(); Set<String> sortSet = param.keySet(); for (String key : sortSet) { formParams.add(new BasicNameValuePair(key, param.get(key))); } HttpEntity entityForm = new UrlEncodedFormEntity(formParams, charset); httpPost.setEntity(entityForm); httpPost.setConfig(getRequestConfig()); log.debug("Http Send,开始第" + (sendTimes + 1) + "次发送..."); HttpResponse httpResponse = httpClient.execute(httpPost); log.debug("Http Send,发送完成,总调用次数为:" + (sendTimes + 1) + "次"); HttpEntity responseEntity = httpResponse.getEntity(); retStr = EntityUtils.toString(responseEntity, charset); log.debug("Http Send,返回报文:" + retStr); EntityUtils.consume(responseEntity); int statusCode = httpResponse.getStatusLine().getStatusCode(); if (statusCode >= 200 && statusCode < 300) { log.debug("Http Send,第" + (sendTimes + 1) + "次调用成功,返回码为:[" + statusCode + "]"); break; } else { retStr = ""; log.error("Http Send,第" + (sendTimes + 1) + "次调用出错,返回码为:[" + statusCode + "]"); if (sendTimes + 1 <= maxSendTimes) { log.debug("Http Send," + (sendIntervalTime / 1000) + "秒后,重新发起请求..."); Thread.sleep(sendIntervalTime); } else { log.debug("Http Send,达到重发最大次数,退出程序!"); } } } catch (ClientProtocolException e) { log.error("Http Send,第" + (sendTimes + 1) + "次调用出错:ClientProtocolException", e); retStr = null; } catch (SocketTimeoutException e) { log.error("Http Send,第" + (sendTimes + 1) + "次调用出错: SocketTimeoutException", e); if (sendTimes + 1 >=maxSendTimes) { throw new Exception(e); } else { retStr = null; } } catch (IOException e) { log.error("Http Send,第" + (sendTimes + 1) + "次调用出错: IOException", e); retStr = null; } catch (Exception e) { log.error("Http Send,第" + (sendTimes + 1) + "次调用出错", e); retStr = null; } finally { sendTimes++; } } while (sendTimes < maxSendTimes); return retStr; } /** * 获取请求配置 * * @return */ public RequestConfig getRequestConfig() { return RequestConfig.custom() .setSocketTimeout(httpPool.getHttpConfig().getSocketTimeout()) .setConnectTimeout(httpPool.getHttpConfig().getConnectTimeout()) .setConnectionRequestTimeout( httpPool.getHttpConfig().getConnectionRequestTimeout()) .build(); } public HttpPool getHttpPool() { return httpPool; } public void setHttpPool(HttpPool httpPool) { this.httpPool = httpPool; }}0 0
- Java Http连接池封装
- Http连接封装
- JAVA-oracle数据库封装操作连接池
- Java HTTP请求类封装
- java连接mysql封装类
- JAVA封装连接数据库【JDBC】
- java socket http连接
- Java中的Http连接
- JDBC 连接池封装
- 轻松把玩HttpClient之封装HttpClient工具类(八),优化启用Http连接池策略
- java实现Http工具类的封装
- HTTP请求封装Java工具类
- java http连接 get post
- java(JDBC连接数据库)[完整版封装]
- java(JDBC连接数据库)[完整版封装]
- java(JDBC连接数据库)[完整版封装]
- java(JDBC连接数据库)[完整版封装]
- java(JDBC连接数据库)[完整版封装]
- 381. Insert Delete GetRandom O(1)
- Linux上搭建BOA服务器
- PHP-简单验证码类
- Sql distinct和group by的区别
- 网络IO之阻塞、非阻塞、同步、异步总结
- Java Http连接池封装
- Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.12.4
- 机器学习-4 多特征 Multiple Features
- 数学——欧拉-拉格朗日方程
- (###################基础用法)python使用mysql数据库(######################)
- Mac下Apache服务器配置
- Ubuntu 安装 mysql
- 指针函数与函数指针的区别
- spring mvc + ajax 这样传参后台怎么收不到值的解决。