Http connection pool configuration

import org.apache.commons.httpclient.HttpStatus;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;

/ **
 * HTTP connection pool control
 * /
public class HttpClientPool {
    
    Private Client static volatile CloseableHttpClient = null;
    Private = null static PoolingHttpClientConnectionManager cm & lt;
    Private static RequestConfig config = null;
    
    // ----------------------- --- configure the connection properties --------------------------
    private static int requestTimeout = 120000; // time acquisition request from the pool
    private static int connectTimeout = 120000; // time to connect to the server
    private static int socketTimeout = 120000; // time of reading information
    // --------------- connection pool configuration properties ---- ----------------------
    Private maxTotal static int = 400; // maximum number of connections
    private static int defaultMaxPerRoute = 200; // default single address does not exceed the number of connections The maximum connection data
    //-----------------------------------------------------


    static {
        config = RequestConfig.custom()
                .setConnectionRequestTimeout(requestTimeOut)  
                .setConnectTimeout(connectTimeout) 
                .setSocketTimeout(socketTimeout).build(); 
        
        cm = new PoolingHttpClientConnectionManager();
        cm.setMaxTotal(maxTotal);
        cm.setDefaultMaxPerRoute(defaultMaxPerRoute);
        
        RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.IGNORE_COOKIES).build();
        client = HttpClients.custom()
                .setRetryHandler(DefaultHttpRequestRetryHandler.INSTANCE)
                .setDefaultRequestConfig(config)
                .setConnectionManager(cm)
                .setDefaultRequestConfig(globalConfig)
                .build();
    }

    public static CloseableHttpClient getHttpClient() {
        if (null == client) {
            synchronized (AmarHttpClientPool.class) {
                if (null == client){
                    RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.IGNORE_COOKIES).build();
                    client = HttpClients.custom()
                            .setRetryHandler(DefaultHttpRequestRetryHandler.INSTANCE)
                            .setDefaultRequestConfig(config)
                            .setConnectionManager(cm)
                            .setDefaultRequestConfig(globalConfig)
                            .build();
                }
            }
        }
        return client;
    }    @SuppressWarnings("unused")
    public static String execute() throws Exception {
        String url = "http://...";
        CloseableHttpClient httpClient = HttpClients.createDefault();//HttpClientPool.getHttpClient();
        HttpPost httpPost = new HttpPost(url);
        RequestConfig config = RequestConfig.custom().setConnectTimeout(5000).setSocketTimeout(3000).setConnectionRequestTimeout(5000).build();
        httpPost.setConfig(config);
        httpPost.setEntity(new StringEntity("请求参数....","utf-8"));
        try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
            int status = response.getStatusLine().getStatusCode();
            IF (Status = HttpStatus.SC_OK!) {
                the throw new new Exception ( "service call:" + url + "failed return status code:" + Status);
            }
            String Result = EntityUtils.toString (response.getEntity ());
            the System .out.println ( "original message:" Result +);
            String startStr = "<NSl: OUT>";
            int startIndex = result.indexOf (startStr);
            int endIndex = result.indexOf ( "</ NSl: OUT> ");
            Assert startIndex> = 0 && endIndex> = 0:" newspaper style flag <ns1: out> or </ ns1: out> does not exist, the original message: "Result +;
            EntityUtils.consume (response.getEntity ( ));
            return result.substring (startIndex + startStr.length (), endIndex);
        }
    }
    
    /**
     * Call Case
     * /
    public static void main (String [] args) {

        CloseableHttpClient httpclient = HttpClientPool.getHttpClient();

            HttpPost httpPost = new HttpPost("url");
            httpPost.setHeader("Content-Type", "application/json;charset=utf-8");
            httpPost.setHeader("Accept", "application/json");
            httpPost.setHeader("X-Forwarded-For","ip");
            httpPost.setEntity(new StringEntity(requestParams.toString(), "UTF-8"));

try (CloseableHttpResponse response = httpclient.execute(httpPost)) {
                int status = response.getStatusLine().getStatusCode();
                if (status != HttpStatus.SC_OK) {
                    throw new Exception("调用服务:" + hubserviceUrl + "失败,返回状态码为:" + status);
                }
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    resp = EntityUtils.toString(entity, "UTF-8");
                }
                EntityUtils.consume(response.getEntity());
            }
    }
}

Guess you like

Origin blog.csdn.net/John_Kry/article/details/87776785