gpt4 book ai didi

java - Apache HttpClient 连接管理

转载 作者:行者123 更新时间:2023-11-30 05:36:10 25 4
gpt4 key购买 nike

我试图了解在实现(不是我的)中使用 Apache HttpClient 管理 http 连接的最佳方法。我认为现在的实现方式很浪费,但由于我对这个库不太熟悉,我想确认一下我的想法。

考虑这种情况:

  • 我在tomcat中有一个web应用程序,意思是多线程环境。
  • 我需要从 Rest 类访问 Rest WebService。我的应用程序的每个请求都会创建一个 Rest 类的新实例,以便调用我需要的服务。

选项 1(当前已实现):Rest 类实例化一个新的 PoolingHttpClientConnectionManager 并发出请求。

就我个人而言,我认为这完全是浪费。一次只有一个线程访问管理器的实例。因此,这种方法并没有真正的好处。这实际上是最糟糕的,因为我假设这个管理器的创建成本可能很高(?)。因此,实际上我们最终创建了多个 PoolingHttpClientConnectionManager,每个线程一个(每个请求一个)。

选项 2:Rest 类只能实例化一个 PoolingHttpClientConnectionManager 作为一种单例。

然后,tomcat 中的每个线程都将重用相同的连接管理器,并且每个线程只会创建新的 httpClient。我认为这可以从池中获得所有好处,例如控制连接数量和重用。但我不知道这对于管理器来说是否是一个很好的用途(我的猜测是应该没问题,因为这个连接管理器的全部目的是在多线程环境中工作)。

选项 3:Rest 类可以实例化 BasicHttpClientConnectionManager 的一个新实例。

我尝试过这个并且工作得很好。这意味着每个线程将有自己的单个连接管理器。尽管该管理器只有一个连接,但由于每个线程有一个管理器,因此我们实现了并行执行。

我认为这种方法的缺点是没有限制。因此,如果我的应用程序收到太多请求,我们每次都会创建一个新的管理器,此外,我们不会重复使用同一路由的连接。

如果您能就此事向我提出任何想法,我将不胜感激。我见过很多例子,但总是来自主函数的简单例子,并显式创建线程。没有看到任何来自 Tomcat 等应用程序服务器的示例。

最佳答案

强烈建议选择选项 2。

关于java - Apache HttpClient 连接管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56571672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com