2

起動時にインスタンスServletを構築するがあります。HttpClientこのクライアントは、リクエストを処理するときに使用されるコラボレーション モジュールと共有されます。FutureRequestExecutionServiceコラボレーション モジュール内で APIを使用して、いくつかのリクエストを同時に簡単に送信したいと考えています。これには、HttpClientインスタンスとともにインスタンスを使用する必要がありExecutorServiceます。チュートリアルでは、の最大同時接続数ExecutorServiceと同じ数のスレッドを使用するように を設定することを推奨しています。HttpClient

futureRequestExecutionService のコンストラクタは、既存の httpClient インスタンスと ExecutorService インスタンスを受け取ります。両方を構成する場合、接続の最大数を使用するスレッドの数に合わせることが重要です。接続よりも多くのスレッドがある場合、使用可能な接続がないため、接続がタイムアウトし始めることがあります。スレッドよりも多くの接続がある場合、futureRequestExecutionService はそれらすべてを使用しません。

ExecutorService共同作業モジュールは、同時リクエスト用の を作成するモジュールであるべきだと思いました。HttpClientこの場合の問題は、コラボレートするモジュールが、許可するように構成されている同時接続の数がわからないため、使用する必要があるスレッドの数を必ずしも認識していないことです。

HttpClientのメソッドを使用できることはわかっていますgetConnectionManagerが、4.3 の時点でこれは推奨されていません。それでは、与えられた同時接続数を確認するための推奨される方法は何HttpClientですか? 間違った答えは、 のConnectionManagerビルドに使用されたオブジェクトへの参照を保存し、HttpClientそれを共同作業モジュールと一緒に渡すか、ある種のグローバル定数を定義することだと思います。多分私は間違った質問をしています。

代わりに、、、およびオブジェクトをすべて同時に作成し、インスタンスだけを、共有クライアントを使用して HTTP 要求を行うモジュールに渡す HttpClient必要があります。HttpClient の作成者の意図と一致する方法でこれを行いたいと思います。この場合、それが正確に何であるかはわかりません。ExecutorServiceFutureRequestExecutionServiceFutureRequestExecutionService

編集:明確にするために、HttpClientインスタンスは、接続マネージャーHttpClientBuilderのセットを持つを使用して作成されます。ただし、これはおよびPoolingHttpClientConnectionManagerの作成と同じスコープでは発生しません。それらを一緒に作成してから、インスタンスを渡す代わりにインスタンスを使用する必要があるのではないかと疑い始めています。PoolingHttpClientConnectionManagerFutureRequestExecutionServiceHttpClientFutureRequestExecutionService

4

2 に答える 2

0

PoolingHttpClientConnectionManagerを使用して、同時に使用できる httpClient 接続の最大数を制御する必要があります。そして、この接続マネージャーで作成した httpClient を FutureRequestExecutionService コンストラクターに渡すことができます。

例も apache hereによって提供されています。

于 2013-09-25T21:46:36.730 に答える