java - 多个 HttpAsyncClient 被认为是一种不好的做法吗?

标签 java apache-httpclient-4.x apache-httpcomponents

我的应用程序必须提供请求“转发”机制,从某种意义上说,它处理传入的请求并通过从根据请求确定的“目标”系统之一检索数据来响应它。 这是通过 HttpAsyncClient 的集合来实现的,每个 HttpAsyncClient 都有自己的配置(MaxConnections、MaxPerRouteConnections 等),具体取决于它从中检索数据的系统。

foreach (TargetSystem t: systems) {
        RequestConfig rc = RequestConfig.custom()
                .setConnectionRequestTimeout(s.timeout)
                .setConnectTimeout(s.timeout)
                .setSocketTimeout(s.timeout)
                .build();

        HttpAsyncClientBuilder b = HttpAsyncClients.custom()
                .setDefaultRequestConfig(rc)
                .setMaxConnTotal(t.maxConnections)
                .setMaxConnPerRoute(t.maxPerRouteConnections);

        t.client = b.build();
        t.client.start();
}

然后,我选择正确的目标客户端并将其用于异步 HTTP 请求。 问题是,这是否是可接受的做法,还是应该仅使用一个 HttpAsyncClient 来处理所有目标系统之间的流量? 目前,为每个客户端打开了许多线程(如 CPU 的数量),因此对于 10 个目标,我最终得到 > 100 个线程。 我想限制每个系统的最大套接字数,并限制为每个系统提供服务的线程数(或所有 http 客户端出站流量)。

最佳答案

每个应用程序或不同的服务只能有一个 HttpAsyncClient 实例。将 HttpASyncClient 视为可以维护多个 session /选项卡的浏览器

关于java - 多个 HttpAsyncClient 被认为是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26511437/

相关文章:

java - 在 java 中获取 URL 参数并从该 URL 中提取特定文本

java - 最大化 JFrame 窗口的不同方式?

java - 类变量以外的对象的易变性

java - 如何使用 Apache HttpPost 上传文件

java - IBM MF8 适配器混搭 - POST 请求

java - 无法使用 HttpClient 获取 'location' header 作为响应

java - HttpClient、HttpConnection 和 ClientConnectionManager 之间的关系

java - 桌面应用程序中的 spring 验证

java - 处理 httpclient 中的弹出窗口

java - 在 Android 7 org.apache.http (Apache HttpClient 4.0) 中启用已弃用的密码套件后主机名不匹配