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

What is the best way for pooling httpclient?

我的主要目标是以静默方式或以某种方式汇集一个 httpclient,我想调用一个方法给我一个 httpclient...因为我认为它对每个 rest 调用来说太耗资源添加一个新的 httpclient实例和设置等等...是否有最佳实践?

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

  1. 仅启动 Apache HTTP 客户端一次,因为它是线程安全的,您可以安全地重用它。如果您使用 Spring 那么将它作为 Bean 存储在 Spring 上下文中应该是安全的。有关线程安全,请参阅以下 link

  2. 尽管 HTTP 客户端实例本身没有池化(因为您将使用它的单个实例),但您可以通过在 HTTP 客户端上配置池化连接管理器来提高性能。有关详细信息,请参阅以下 link。 (在该页面上搜索 'Pooling connection manager')。实际代码应该类似于下面的代码片段:

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("localhost", 80);
cm.setMaxPerRoute(new HttpRoute(localhost), 50);

CloseableHttpClient httpClient = HttpClients.custom()
        .setConnectionManager(cm)
        .build();

希望这对您有所帮助。