0

エンドユーザーからの単一のリクエストが他のリモートシステムへの1つ以上のhttpリクエストをトリガーするというユースケースがあります。リモートシステムからのすべての応答は、エンドユーザーへの単一の応答に集約されます。これは、Websphereでcommonjworkmanagerを使用することで実現しました。

ここで、複数の同時http呼び出しを処理するスレッドを少なくするために、asyncHttpClientを使用します。

だから私の質問は:

asyncHttpClientをcommonjworkmanagerと統合する方法は?スレッドプールとしてcommonjを使用する必要があります。これは、wehsphereでスレッドを管理する唯一の方法だからです。

お知らせ下さい。

4

1 に答える 1

1

以下に示すように、ワーク マネージャーを活用する新しい ExecutorService を作成するだけです。詳細...

  1. WorkManager をルックアップして WASThreadFactory を構築する

    InitialContext ctx = new InitialContext(); WorkManager wm = (WorkManager)ctx.lookup("java:comp/env/wm/default"); ThreadFactory tf = new WASThreadFactory(wm);

  2. 制限付きバッファーを使用して ThreadPoolExecutor を作成する

    BlockingQueue q = new ArrayBlockingQueue(50); ExecutorService myOwnThreadPool= = new ThreadPoolExecutor( 1, 10, 5000, TimeUnit.MILLISECONDS, q, tf);

  3. ドキュメントによると、以下のように ExecutorService を使用するように指定できます。

    ビルダービルダー = 新しい AsyncHttpClientConfig.Builder(); builder.setExecutorService(myOwnThreadPool); AsyncHttpClient クライアント = 新しい AsyncHttpClient(builder.build());

注: コンパイルを確認しませんでした。ただし、以前のプロジェクトでこれを使用しました。

于 2012-11-21T19:53:42.507 に答える