2017-04-19 30 views
0

HttpAsyncClientについての基本的な概念はほとんど理解できません。HttpAsyncClient例外を処理する方法

  1. 私はここで接続プールを使用していません。ここで失敗したhttpリクエストを閉じるには、ここ(1)または(2)の正しい方法を教えてください。

  2. 新しい要求ごとにhttpclientを初期化すると、ここでのパフォーマンスの影響は何ですか?

  3. すべての失敗した要求に対してfinallyブロックで接続を閉じる必要がありますか?そうしないとどのような欠点がありますか?

RequestConfigコンフィグ= RequestConfig.custom()setConnectTimeout(×1000 3).setConnectionRequestTimeout(×1000 3).setSocketTimeout(×1000 30).build()。 CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()。setDefaultRequestConfig(config).build();

httpclient.start();

試し{

if (targetHost != null && httpget != null) 
    response = httpclient.execute(HttpHost, HttpGet); 
catch (Exception e) { 

    throw new CustomException("service.unavailable"); 

} finally { 
    if (httpget != null){ 
     httpget.releaseConnection(); (1) 
     httpclient.close();(2) 
    } 

} 

答えて

1

すべては一見OKに見えます。私はhttpget.releaseConnection()を取り除くだろう、それは必要ではない。 closeステートメントを実行すると、必要なものすべてが処理され、接続を実行しているスレッドも解放されます。あなたの3番目の質問にそのような答えがあります。接続を閉じると、接続されているリソースが解放されます。

各要求を新しい接続に初期化する場合は、私はあなたがこれに接続しているサーバ/ウェブサイトの応答としてリソースにはあまり関心がありません。ウェブリクエストを開くには、あなたの代わりにサーバーが必要で、応答や物事が起こるのを待つ時間がかかります。私は、Webリクエストのすべての処理を含む最適化された関数を書いて、それぞれの呼び出しを呼び出すことで、複数の接続が確立されている間に他のものがビジー状態にあるマルチスレッドアプリケーションになるようにします。

+0

ありがとうエドワード、私は最終的にブロック内でhttpclient接続を閉じないとどうなりますか?新しいスレッドで新しい接続が閉じられずに作成されますか?最終的なブロックがない場合、私のコードは正常に動作します。 – Sindhu