CloseableHttpClient и как его использовать из пула соединений?

#java #httpclient #connection-pooling #closeablehttpresponse

#java #httpclient #объединение в пул соединений #closeablehttpresponse

Вопрос:

У меня есть создание ConnectionManager для пула следующим образом ->>

     public static PoolingHttpClientConnectionManager getCm() {
        return cm;
    }

    public static void setCm(PoolingHttpClientConnectionManager cm) {
        ClassName.cm = cm;
    }

public static PoolingHttpClientConnectionManager createPool()
        {
            System.out.println("Generating new connection pool");
            setCm( new PoolingHttpClientConnectionManager());   
            getCm().setMaxTotal(10);
            getCm().setDefaultMaxPerRoute(5);
            return getCm();
        }
  

Я создаю экземпляр CloseableHttpClient, используя это ->>

     public static CloseableHttpClient createConnection(){
            if(getCm()!=null)
                return  HttpClients.custom().setConnectionManager(getCm()).setConnectionManagerShared(true).setDefaultRequestConfig(getConfig()).build();
            else
                return HttpClients.custom().setConnectionManager(createPool()).setConnectionManagerShared(true).setDefaultRequestConfig(getConfig()).build();
        }
  

Но здесь каждый раз, когда я создаю экземпляр CloseableHttpClient, используя PoolingHttpClientConnectionManager. Я в замешательстве, если это правильный способ или нет?

В классе, где я выполняю HTTP-вызов, я делаю это таким образом —>>

 private static CloseableHttpClient client;   //class level variable. static or final? Which one to prefer? I want this to handle more than 50 concurrent request

Inside My method--->>

client = createConnection();

String endPoint = //someendpoint 
HttpPost httpPost = new HttpPost(endPoint);
httpPost.setHeader("Content-type", "application/json");
httpPost.setHeader("Accept-API-Version", "resource=2.0, protocol=1.0");


CloseableHttpResponse response1 = null;
        try{
             response1 =  client.execute(httpPost);
                String responseString;
                int statusCode;
                responseString = EntityUtils.toString(response1.getEntity());
         //doing something useful
         }catch(){
          
          } finally(){           //Another big question comes here. How to close and what should I close?
                                 /Just to be on the safe side, I am closing everything
           httpPost.releaseConnection();
           if(response1!= null)
                        response1.close();
           if (client != null)
                        client.close();
        

         }
  

Пожалуйста, предложите лучший способ или альтернативу? Также я новичок и делаю это, чтобы учиться, поэтому простите и поправьте меня, если я допустил какую-либо ошибку.