java - 为什么我不应该将 PoolingHttpClientConnectionManager 与 FutureRequestExecutionService 一起使用?

标签 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 请求 future。 。 。那么回调代码是哪个线程运行的呢?

最佳答案

该帖子建议不要“... PoolingHttpClientConnectionManager 和 FutureRequestExecutionService 连接代码的紧密耦合...”。没有理由不将 FutureRequestExecutionServicePoolingHttpClientConnectionManager 一起使用。

关于java - 为什么我不应该将 PoolingHttpClientConnectionManager 与 FutureRequestExecutionService 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44896959/

相关文章:

java - getConnection() 和 ResultSet 中的错误

java - 无法在android上的sqlite数据库中创建表

java - 如何在表格上打印 0-30 的阶乘

ios - 延迟后在后台线程中处理核心数据

java - Executors 相对于 new Thread 的优势

java - 未知主机异常,Apache HttpClient,Java,wunderground

java - 使用 Apache HttpClient 发布 MultipartEntity 时,ByteArrayBody 可以工作,但 InputStreamBody 会抛出 NoHttpResponseException

java - MyBatis 解析具有多个语句的参数

javascript - javascript中的多线程和订阅/发布方法

javascript - Node.js 服务器限制新连接