是否将多个HttpAsyncClient视为不良做法?

问题描述 投票:1回答:1

我的应用程序必须提供请求“转发”机制,从某种意义上说,它处理传入的请求并通过从基于请求确定的“目标”系统之一中检索数据来响应它。这是通过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客户端出站流量)。

java apache-httpclient-4.x apache-httpcomponents
1个回答
1
投票

每个应用程序或单独的服务应只有HttpAsyncClient的一个实例。将HttpASyncClient视为可以维护多个会话/标签的浏览器

© www.soinside.com 2019 - 2024. All rights reserved.