1

スプリング積分を使用して、チャネル出力で並列処理を実行しています。実行する並列処理の量を制御可能にする必要があるという要件があります。そのため、並列処理を増減できる必要があります。これが私の現在の設定です:

<service-activator input-channel="computerInputChannel" ref="computer" method="compute">
  <poller task-executor="computerRequestExecutor" fixed-rate="1000"></poller>
</service-activator>

<task:executor id="computerRequestExecutor" pool-size="1" queue-capacity="100" />
<channel id="computerInputChannel"><queue/></channel>

コードでは、並列処理の量を変更する場合は、setCorePoolSizeメソッドを実行します。

私の問題は、コアプールのサイズを大きくすると並列処理が増加しますが、コアプールのサイズを小さくすると、増加した並列処理が消えないことです。たとえば、コアプールサイズが最初に1に設定されている場合、タスクは一度に1つずつ実行されます。そして、それが5に設定されている場合、一度に5つ実行されるのがわかります。ただし、1にリセットすると、一度に5回実行され続けます。

並列処理を調整するにはどうすればよいですか?

コードをたどると、interruptIfIdle()がThreadPoolExecutorクラスから呼び出されていることがわかりますが、そこからは何も得られません。

私は春の統合に非常に慣れていないので、間違った角度からこれに取り組んでいる可能性があります。私が望むことを達成する方法についての助けや代替案は素晴らしいでしょう。

この投稿は、私が書いたものが不明確であるかどうかについての私の正確な質問です-残念ながら、それは決して答えられませんでした。

4

2 に答える 2

2

の統合フォーラムから回答を受け取りました

基本的に、タスクエグゼキュータのキューサイズが0であること、キープアライブ時間が0であること、ポーラーのポーリングあたりの最大メッセージ数が1であることを確認する必要がありました。

于 2013-02-28T14:46:28.160 に答える
1

私が正しく理解していれば、あなたは実際にmaxPoolSizeを変更したいと思うでしょう。コアが大きくなると、maxも大きくなり、次の条件が常に真になります。max> = core

コアが1で最大が5の場合、アイドル時間/タスク制限の設定も構成されていると、プールは最大からコアサイズに縮小できます。

お役に立てば幸いです。

于 2013-02-26T14:04:37.297 に答える