gpt4 book ai didi

java - 如何在Java中缓存httpclient对象?

转载 作者:行者123 更新时间:2023-11-30 01:56:14 25 4
gpt4 key购买 nike

在我的客户端 Web 应用程序中使用 Apache HttpClient 4.5.x,它连接到(并登录)另一个(例如主)服务器 Web 应用程序。

这 2 个 Web 应用程序之间的关系是多对多 - 这意味着对于客户端 Web 应用程序中某些用户的请求,它必须以另一个用户身份登录 + 进行休息调用,服务器网络应用程序。因此需要对 cookiestore 进行一些分离,并且在创建 httpclient 实例后无法获取/设置 cookie 存储,因此客户端 webapp 中收到的每个请求线程都会执行类似的操作(并且需要优化):

HttpClient client = HttpClientBuilder.create().setDefaultCookieStore(new BasicCookieStore()).build();
//Now POST to login end point and get back JSESSIONID cookie and then make one REST call, and then the client object goes out of scope when the request ends.

我希望询问缓存 httpclient 实例对象的最佳实践,因为它很重,并且应该至少重用于多个请求,如果不是将整个客户端 Web 应用程序作为静态单例。

具体来说,我希望就以下哪些(如果有的话)方法构成最佳实践获得建议:

  1. 使用静态 ConcurrentHashMap 为客户端 Web 应用程序中的每个“用户”缓存 httpclient 及其关联的 basiccookiestore,并且仅在包含的缓存 cookie 接近其到期时间时登录。不确定内存使用情况,未使用/很少使用的 httpclient 会保留在内存中而不会被驱逐。

  2. 仅缓存 Cookie(以某种方式),但每当需要使用该 cookie 进行休息调用时,都会重新创建一个新的 httpclient 对象。这会保存之前的登录调用,直到 cookie 过期,但不会重用 htptclient。

  3. PooledConnectionManager - 但无法轻松找到示例,尽管可能需要设计驱逐策略、最大线程数等(因此可能很复杂)。

    <

有更好的方法吗?谢谢。

引用文献:

Generally it is recommended to have a single instance of HttpClient per communication component or even per application

最佳答案

使用并发 HashMap 将是实现您想要做的事情的最简单方法。

此外,如果您使用 Spring,您可能需要创建一个 Bean 来保存 HTTP 客户端。

关于java - 如何在Java中缓存httpclient对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54433165/

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