为什么我不能将PoolingHttpClientConnectionManager与FutureRequestExecutionService一起使用?

时间:2017-07-04 04:18:13

标签: java multithreading apache-httpclient-4.x executorservice

我正在编写一个需要运行许多并行http请求的服务。它也将部署在自动扩展环境中,但我希望尽可能多地从每个服务实例中获得性能。

我发现了这篇文章How to determine the maximum number of simultaneous connections for a given `HttpClient` instance并注意到建议不要混合这两个类。

我很好奇为什么。基本上,我想将http客户端作业提交给执行程序服务,我希望使用http连接池来重用http连接。也许,我过度思考了这一点,但我不明白为什么在一个应用程序中将这两个类/概念结合起来是个坏主意。

另外,我注意到示例中的响应是每个FutureRequestExecutionService使用一个http客户端实例。 。 。这让我有点紧张,但CloseableHttpClient是线程安全的,所以也许我不必要地担心。

此外,对于我的代码提交的大多数客户端任务,我不在乎响应是否为200,如果不是,我只是计划增加错误跟踪指标和可能记录异常,所以我想去回调路线。在那个问题上,我不清楚回调将在哪里运行。如果我的线程池线程运行并完成,即不阻止http请求期货。 。 。然后什么线程运行回调代码?

1 个答案:

答案 0 :(得分:1)

有问题的帖子反对" ...紧密耦合PoolingHttpClientConnectionManager和FutureRequestExecutionService接线代码......"。没有理由不将FutureRequestExecutionServicePoolingHttpClientConnectionManager一起使用。