我的主要目标是在静默或某种程度上汇集一个httpclient,我想调用一个方法给我一个httpclient ...因为我认为它的每个休息调用的资源使用量太多会添加一个新的httpclient实例和设置等等......是否有最佳实践?
答案 0 :(得分:1)
如果您参考Apache HTTP客户端,则可以按照以下步骤操作:
仅启动Apache HTTP客户端一次,因为它是线程安全的,您可以安全地重用它。如果您使用Spring,那么将它作为Bean存储在Spring Context中应该是安全的。请参阅以下链接以获取线程安全性:http://hc.apache.org/httpclient-3.x/performance.html
尽管HTTP客户端实例本身没有合并(因为您将使用它的单个实例),但是为了提高性能,您可以做的是在HTTP客户端上配置池化连接管理器。有关详细信息,请参阅以下链接:https://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html。 (在该页面上搜索'池连接管理器')。实际代码应与下面的代码段相似:
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();
希望这有帮助。