2

質問:Webアプリでは、入力をN(100)番号としてWebサービスを呼び出し、Webサービスがキューから応答を取得できるようにする必要があります。100の応答を取得したら、それを5つのスレッドに分割し、それに応じて(各20)スレッドごとにこの応答を分割する必要があります。そして、スレッドの処理が完了すると、Webサービスを再度呼び出す必要があります。

入力番号に応じて応答を返すWebサービスがありますが、他の部分を実装するためにどのテクノロジーを使用すべきかわかりません。

私は以下について研究しました:

  1. Springタスクの実行:http ://static.springsource.org/spring/docs/3.0.x/reference/scheduling.html-しかし、開始する必要のあるスレッドの数を指定できないため、これは適合しません。

  2. パーティショニング:section7.4: http ://static.springsource.org/spring-batch/reference/html/scalability.html-私はこれに出くわしたばかりですが、以前はこれを使用していませんでした。

誰かが私を正しい方向に導いてくれるといいですね。

初めての投稿ですので、間違いがありましたらお詫び申し上げます。

更新:2012年11月21日:ThreadPoolTask​​Executorを使用して実装しました。休暇後にコードスニペットを投稿します。しかし、私を悩ませていることの1つは、100個の結果を20個のグループに分割し、taskExecutor.submit();を持たなければならないことです。Forループで5回ループすると、5つのスレッドが作成されます。この100個のリクエストを送信し、生成するスレッドの数を選択できる簡単な方法があると便利です。

幸せな感謝祭の人たち。休日後に投稿を更新します

4

3 に答える 3

1

google guavaがhttp://code.google.com/p/guava-libraries/wiki/ListenableFutureExplainedに適合するかどうか、またはhttp://akka.io/フレームワークがニーズに適合するかどうかを確認することができます。どちらも、スレッド処理のカプセル化と実装のコールバックが容易です。

于 2012-11-20T19:49:13.837 に答える
1

まだSpringを使用していない場合は、タスク実行フレームワークのためだけにSpringを使用するのではなく、標準のJavaを使用します。エグゼキュータを見てください。

于 2012-11-20T19:49:20.717 に答える
0

Spring Task Executionを使用する場合、「開始する必要のあるスレッドの数を指定できないため、これは適合しません」とおっしゃいました。

実際にThreadPoolTask​​Executorを使用すると、これを非常に簡単に実現できます。

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
  <property name="corePoolSize" value="5" />
  <property name="maxPoolSize" value="10" />
  <property name="queueCapacity" value="25" />
</bean>

<bean id="taskExecutorExample" class="TaskExecutorExample">
  <constructor-arg ref="taskExecutor" />
</bean>

ここでのcorePoolSize属性は、最初に開始するスレッドの数を設定します。

http://static.springsource.org/spring/docs/3.0.x/reference/scheduling.htmlで25.2.2UsingTaskExecutorを読むことができます

于 2012-11-21T11:58:22.120 に答える