第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Java 中緩存 httpclient 對象?

如何在 Java 中緩存 httpclient 對象?

開心每一天1111 2022-05-25 16:57:47
在我的客戶端 webapp 中使用Apache HttpClient 4.5.x,它連接到(并登錄到)另一個(比如主)服務(wù)器 webapp。這兩個 webapps 之間的關(guān)系是多對多的——這意味著對于客戶端 webapp 中的某些用戶的請求,它必須以另一個用戶身份登錄 + 在服務(wù)器 webapp 中進(jìn)行休息調(diào)用。因此需要對 cookiestore 進(jìn)行一些分離,并且在創(chuàng)建 httpclient 實(shí)例后無法(是否存在?)獲取/設(shè)置cookie 存儲,因此客戶端 webapp 中收到的每個請求線程都會執(zhí)行以下操作(并且需要優(yōu)化):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 實(shí)例對象緩存為重的最佳實(shí)踐,并且應(yīng)該至少為多個請求重用,如果不是將整個客戶端 webapp 作為靜態(tài)單例。具體來說,我希望就以下哪些(如果有)方法構(gòu)成最佳實(shí)踐提供建議:使用靜態(tài) ConcurrentHashMap為客戶端 webapp 中的每個“用戶”緩存 httpclient 及其關(guān)聯(lián)的 basiccookiestore,并且僅在包含的緩存 cookie 接近其到期時間時登錄。不確定內(nèi)存使用情況,并且未/很少使用的 httpclient 會留在內(nèi)存中而不會被驅(qū)逐。僅緩存 Cookie(以某種方式),但在需要使用該 cookie 進(jìn)行休息調(diào)用時重新創(chuàng)建一個新的 httpclient 對象。這會保存之前的 login 調(diào)用,直到 cookie 過期,但不會重用 htptclient。PooledConnectionManager - 但無法輕松找到示例,盡管可能需要設(shè)計(jì)驅(qū)逐策略、最大線程數(shù)等(因此可能很復(fù)雜)。有沒有更好的方法來做到這一點(diǎn)?謝謝。
查看完整描述

2 回答

?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個贊

使用并發(fā)哈希映射將是實(shí)現(xiàn)您想要做的最簡單的方法。

此外,如果您使用 Spring,您可能需要創(chuàng)建一個 bean 來保存 HTTP 客戶端。


查看完整回答
反對 回復(fù) 2022-05-25
?
哈士奇WWW

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個贊

你為什么要做這一切?CookieStore可以使用 local 為每個請求分配不同的HttpContext.


如果需要,可以維護(hù)CookieStore每個唯一用戶的實(shí)例映射。


CloseableHttpClient httpclient = HttpClients.createDefault();

CookieStore cookieStore = new BasicCookieStore();


// Create local HTTP context

HttpClientContext localContext = HttpClientContext.create();

// Bind custom cookie store to the local context

localContext.setCookieStore(cookieStore);


HttpGet httpget = new HttpGet("http://httpbin.org/cookies");

System.out.println("Executing request " + httpget.getRequestLine());


// Pass local context as a parameter

CloseableHttpResponse response = httpclient.execute(httpget, localContext);

try {

    System.out.println("----------------------------------------");

    System.out.println(response.getStatusLine());

    List<Cookie> cookies = cookieStore.getCookies();

    for (int i = 0; i < cookies.size(); i++) {

        System.out.println("Local cookie: " + cookies.get(i));

    }

    EntityUtils.consume(response.getEntity());

} finally {

    response.close();

}


查看完整回答
反對 回復(fù) 2022-05-25
  • 2 回答
  • 0 關(guān)注
  • 176 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號