HttpClient 4.3 链接复用 和 和设置 timeout 的方法
程序员文章站
2022-07-14 12:25:01
...
import org.apache.http.HttpResponse; import org.apache.http.conn.ConnectionKeepAliveStrategy; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.protocol.HttpContext; /** * http连接池 * @author shencl */ public class HttpPool { static CloseableHttpClient httpClient = null; public static synchronized CloseableHttpClient getHttpClient() { if (httpClient == null) { PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); // 连接池最大连接数 cm.setMaxTotal(200); // 单条链路最大连接数(一个ip+一个端口 是一个链路) cm.setDefaultMaxPerRoute(100); // 指定某条链路的最大连接数 ConnectionKeepAliveStrategy kaStrategy = new DefaultConnectionKeepAliveStrategy() { @Override public long getKeepAliveDuration(HttpResponse response, HttpContext context) { long keepAlive = super.getKeepAliveDuration(response, context); if (keepAlive == -1) { keepAlive = 60000; } return keepAlive; } }; httpClient = HttpClients.custom().setConnectionManager(cm).setKeepAliveStrategy(kaStrategy).build(); } return httpClient; } }
private static int CONNECT_TIMEOUT = 10000; private static int SOCKE_TTIMEOUT = 10000; private static int CONNECTION_REQUEST_TIMEOUT = 1000; CloseableHttpClient httpClient = HttpPool.getHttpClient(); HttpGet httpGet = new HttpGet(url); RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(CONNECT_TIMEOUT) .setConnectionRequestTimeout(CONNECTION_REQUEST_TIMEOUT) .setSocketTimeout(SOCKE_TTIMEOUT).build(); httpGet.setConfig(requestConfig); CloseableHttpResponse response = httpClient.execute(httpGet); Integer code = response.getStatusLine().getStatusCode(); HttpEntity entity = response.getEntity();
上一篇: jersey webservice