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;
}
アボート後に接続を解除しているようです。 Thanks –
しかし、releaseConnectionメソッドとabortメソッドの違いは何ですか? 原子変数をリセットします。実装はそれらにどのように依存していますか? –
リソース管理に関しては、ほとんど同じことをしています。 #abortメソッドは、要求オブジェクトを無効な(中断された)状態にしますが、#releaseConnectionメソッドと#resetメソッドは要求を初期状態にリセットし、再利用と再実行を可能にします。 – oleg