java http连接池使用_HttpClient高并发下性能优化-http连接池

首先,明确两点:

1.http连接池不是万能的,过多的长连接会占用服务器资源,导致其他服务受阻

2.http连接池只适用于请求是经常访问同一主机(或同一个接口)的情况下

3.并发数不高的情况下资源利用率低下

那么,当你的业务符合上面3点,那么你可以考虑使用http连接池来提高服务器性能

使用http连接池的优点:

1.复用http连接,省去了tcp的3次握手和4次挥手的时间,极大降低请求响应的时间

2.自动管理tcp连接,不用人为地释放/创建连接

使用http连接池的大致流程 :

1.创建PoolingHttpClientConnectionManager实例

2.给manager设置参数

3.给manager设置重试策略

4.给manager设置连接管理策略

5.开启监控线程,及时关闭被服务器单向断开的连接

6.构建HttpClient实例

7.创建HttpPost/HttpGet实例,并设置参数

8.获取响应,做适当的处理

9.将用完的连接放回连接池public class HttpConnectionPoolUtil {

private static Logger logger = LoggerFactory.getLogger(HttpConnectionPoolUtil.class);

private static final int CONNECT_TIMEOUT = Config.getHttpConnectTimeout();// 设置连接建立的超时时间为10s

private static final int SOCKET_TIMEOUT = Config.getHttpSocketTimeout();

private static final int MAX_CONN = Config.getHttpMaxPoolSize(); // 最大连接数

private static final int Max_PRE_ROUTE = Config.getHttpMaxPoolSize();

private static final int MAX_ROUTE = Config.getHttpMaxPoolSize();

private static CloseableHttpClient httpClient; // 发送请求的客户端单例

private static PoolingHttpClientConnectionManager manager; //连接池管理类

private static ScheduledExecutorService monitorExecutor;

private final static Object syncLock = new Object(); // 相当于线程锁,用于线程安全

/**

* 对http请求进行基本设置

* @param httpRequestBase http请求

*/

private static void setRequestConfig(HttpRequestBase httpR

你可能感兴趣的:(java,http连接池使用)