汇集httpclient的最佳方法是什么?

时间:2017-04-06 13:40:43

标签: java pool

我的主要目标是在静默或某种程度上汇集一个httpclient,我想调用一个方法给我一个httpclient ...因为我认为它的每个休息调用的资源使用量太多会添加一个新的httpclient实例和设置等等......是否有最佳实践?

1 个答案:

答案 0 :(得分:1)

如果您参考Apache HTTP客户端,则可以按照以下步骤操作:

  1. 仅启动Apache HTTP客户端一次,因为它是线程安全的,您可以安全地重用它。如果您使用Spring,那么将它作为Bean存储在Spring Context中应该是安全的。请参阅以下链接以获取线程安全性:http://hc.apache.org/httpclient-3.x/performance.html

  2. 尽管HTTP客户端实例本身没有合并(因为您将使用它的单个实例),但是为了提高性能,您可以做的是在HTTP客户端上配置池化连接管理器。有关详细信息,请参阅以下链接:https://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html。 (在该页面上搜索'池连接管理器')。实际代码应与下面的代码段相似:

  3. 
    
        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
        // Increase max total connection to 200
        cm.setMaxTotal(200);
        // Increase default max connection per route to 20
        cm.setDefaultMaxPerRoute(20);
        // Increase max connections for localhost:80 to 50
        HttpHost localhost = new HttpHost("locahost", 80);
        cm.setMaxPerRoute(new HttpRoute(localhost), 50);
    
        CloseableHttpClient httpClient = HttpClients.custom()
                .setConnectionManager(cm)
                .build();
    

    希望这有帮助。