我的应用程序必须提供请求“转发”机制,在某种意义上它处理传入请求并通过从基于请求确定的“目标”系统之一检索数据来响应它。 这是通过一组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客户端出站流量)。
由于
答案 0 :(得分:1)
每个应用程序或不同服务应该只有一个HttpAsyncClient
个实例。将HttpASyncClient
视为可以维护多个会话/标签的浏览器