1

バックグラウンド :

  1. Solr サービスに接続するために HttpClient (SolrJ) を使用しています。ただし、質問はSolrとは直接関係ありません。

  2. 負荷テストを行っているときに、次の問題に遭遇しました。

    原因: java.lang.IllegalStateException: BasicClientConnManager の無効な使用: 接続がまだ割り当てられています。

  3. SOF 回答 - プール接続マネージャーを使用するには

    BasicClientConnManager の無効な使用: 接続がまだ割り当てられています

質問 :

次のコードのようにPoolingHttpClientConnectionManagerを使用しています。接続サイズを手動で調整する代わりに、 AIMDBackoffManagerを使用して管理したいと考えています。AIMDBackoffManagerただし、パラメーターとして接続プールが必要であることがわかります。

public static final PoolingClientConnectionManager poolingConnectionManager = new PoolingClientConnectionManager();

public static DefaultHttpClient getHttpClient(){

    DefaultHttpClient  httpClient = new DefaultHttpClient(poolingConnectionManager);
    httpClient.setBackoffManager(new AIMDBackoffManager(poolingConnectionManager));

 ...
 ...

}

私はかなりグーグルで検索しましたが、 の使用法に関する例を見つけることができませんBackoffManager。だから、これは私がしたことですが、接続マネージャーをDefaultHttpClient. それとも、初めて に渡しHttpClient、2 回目に に渡すことを考えると、心配する必要はありませんBackoffManagerか?

httpclient-4.2.3 を使用しています

4

2 に答える 2

1

私もこの深海に足を踏み入れました。私の場合、BackoffManager が原因で失敗しているように見える ServiceUnavailableRetryStrategy の使用方法を調査しています。使用方法をグーグルで調べることができず、HttpClient ソースコードにもあまりないため、これは完成した機能ではないという印象を受けました。

于 2013-12-12T18:39:41.230 に答える
0

AIMDBackoffManager コンストラクターは、ConnPoolControl (接続マネージャーが実装) を受け取ります。このインターフェイスを見ると、BackoffManager がタスクを実行するために使用するプールのルート固有の統計のみが返されることがわかります。

そのため、クライアントのビルド中に接続マネージャーを 2 回渡すことについて心配する必要はありません。AIMDBackoffManager が backOff とプローブの実装で接続マネージャーのロックを取得することに注意してください。これはsourceで確認できます。

于 2017-12-03T06:33:52.510 に答える