2017-01-20 11 views
1

バネ統合で一種のプライオリティチャネルを実装しようとしていますが、ブロックされており、ウェブ上で解決策が見つかりませんでした。ラウンドロビンコンシューマとのスプリング統合プライオリティチャネル

私はservice activatorを使用してchannel(6)を複数回読んでみたいです。各チャンネルは、優先レベル(CRITICAL、HIGHEST、HIGH、NORMAL、LOW、LOWEST)用です。メッセージはRabbitMQから来て、ルーターで正しいチャンネルに配信されます。

問題は、時間に基づいてラウンドロビンを使用してチャネルで代わりに読み取られるサービスアクティベータを作成することです。

は例えば、CRITICALは時間を実行している5 secondesを持っている必要があり、その後、3秒間の最高のサービススイッチ、およびその後、1秒間HIGHに、...

はそれがで正しくそれを行うことは可能です春の統合? 正しいコンポーネントを使用していない可能性がありますか?

よろしくお願いいたします。

答えて

0

優先チャンネルパターンは少し違った働きをします。 ソートをサポートするキューです。新しいメッセージがキューに到着すると、それはpriorityに従って適切な場所にソートされます。それは絶対にこのチャネルのあなたの消費者がいかに働くか重要である。優先順位はチャネル内でのみ発生します。消費者は、注文されたようにキューからメッセージをポーリングするだけで、CRITICALが存在しない場合はCRITICAL、HIGHESTよりも優先、などがあります。

一方、異なるチャネルを優先してメッセージを配信する場合、これらのチャネルごとに個別のサービスアクティベータを持たないのはなぜですか?それぞれの優先順位は、それぞれのプロセスによって読み取られます。

「実行する時間」に基づいたこのような解決策はありません。メッセージングアーキテクチャには適していないようです。あなたはスケジュールされたタスクcancel()またはQuartzを使って "until until task to ..."を実装することができます。時間制御について

UPDATE

は、私はあなたが無限ループに本当にstart()の異なるサービス活性化剤とstop()は、適切なスケジュールされた時間後にそれらをsの解決策を考え出すことができると思います。これらのサービスアクティベータはすべて、異なるキューチャネルをリスンする必要があります。

+0

私はチャネル別にサービスアクチベータを1つ持つことを考えましたが、問題は、重要なメッセージが低レベルよりも前に処理されることを確認する必要があることです。レベルが高いほど、許可される時間が長くなります)。アイデアは、チャネルを他のチャネルをしばらくブロックすることを避けることです。さて、私は、必要に応じてさまざまなサービスアクティベータを起動し停止することができるサービスアクティベータコントローラを持つことが可能かどうかを調べようとしています。 – Kelevra

+0

私の答えでは、いくつかの更新をお願いします。われわれが何らかの形で包括的なソリューションに包んで、フレームワークにすぐに使える機能として置くことができるかどうかは確かではありません...しかしもちろん、これ以上のアイディアは大歓迎です! –

関連する問題