2017-09-07 11 views
1

apache httpクライアントを使用して外部ヘルパーシステムに接続しています。そして私たちはHystrixコマンドを使ってHTTPリクエストを実行しています。 これらの要求が応答するのに時間がかかり、時間がHystrixタイムアウトを超えると、Hystrixはfallbackを返します。これはnullです。レスポンスがnullの場合にapache http接続をプールに開放

nullを返すので、EntityUtilsを使用してHttpレスポンスを消費することができないため、接続プールに接続が返されません。

httpGet.releaseConnectionを試しました。しかし、それは動作していないようです。

httpリクエストで予想される時間よりも応答に時間がかかる場合、接続をプールに戻す最も良い方法は何ですか?

Hystrix自動的にリクエストの実行の過程でスローされた例外の場合には、すべてのリソースを解放しHttpClientを

CloseableHttpClient httpClient = //Get client from pool 
HttpGet httpGet = new HttpGet(serverPath); 
HystrixTestCommand testCommand = new HystrixTestCommand(httpClient, httpGet); 
CloseableHttpResponse httpResponse = testCommand.execute(); 
if (httpResponse != null 
     && httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { 
    //Consule entity 
} else if (httpResponse != null 
     && httpResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { 
    //Consule entity 
} else if(httpResponse == null){ 
    // When http request not responded within anticipated time 
    httpGet.releaseConnection(); 
    logger.info("Release connection"); 
    return null; 
} 

答えて

2

かの場合にはRESTクエリと処理結果を実行するために

@Override 
protected CloseableHttpResponse getFallback() { 
    logger.error(" Returning fallback"); 
    return null; 
} 

コードフォールバックリクエストは発信者によって中止されます。 HttpGet#abortを実行してリクエストを終了し、リクエストに関連するリソースの割り当てを解除することができます。

+0

アボート後に接続を解除しているようです。 Thanks –

+0

しかし、releaseConnectionメソッドとabortメソッドの違いは何ですか? 原子変数をリセットします。実装はそれらにどのように依存していますか? –

+1

リソース管理に関しては、ほとんど同じことをしています。 #abortメソッドは、要求オブジェクトを無効な(中断された)状態にしますが、#releaseConnectionメソッドと#resetメソッドは要求を初期状態にリセットし、再利用と再実行を可能にします。 – oleg

関連する問題