次のようなワークフローが必要です。
/ 労働者 1 \ =リクエスト チャネル= -> [保留キュー|||] -> ワーカー 2 -> =応答チャネル= \労働者3/
あれは:
- リクエストが到着し、FIFO キューに入る
- 次に、同一のワーカーがキューからタスクを取得します
- 任意の時点で、ワーカーは 1 つのタスクのみを実行できます
- ワーカーが空いていて保留キューが空でない場合、ワーカーはすぐに別のタスクを取得する必要があります
- タスクが完了すると、ワーカーは結果を
Response Channel
QueueChannel
Spring Integration に があることは知っていますが、これらのチャネルにはポーリングが必要です (これは最適ではないようです)。特に、ワーカーが忙しくできるのであれば、ワーカーには忙しくしてもらいたいです。
また、キューを完全に回避し、単純にタスクをすべてのワーカーにラウンドロビンさせることも検討しましたが、一部のタスクは他のタスクよりも速く完了する可能性があるため、待機列を 1 つにすることをお勧めします。さらに、残りのジョブ数 (キューから取得できる) と、すべてまたは特定のジョブをキャンセルする機能についての洞察が必要です。
ポーリングを回避しながら、このメッセージ キューイング/作業分散パターンを実装するにはどうすればよいですか?
編集: Message Dispatcher パターンを探しているようです-Spring/Spring Integration を使用してこれを実装するにはどうすればよいですか?