Camelを使用したActiveMQメッセージキューの動的な調整
-
19-08-2019 - |
質問
私は特定のシナリオを念頭に置いたActiveMQ /キャメル初心者です。まず可能かどうか、そして誰かが少し方向性を提供できるかどうかを考えます。
基本的に、キューから動的な調整を実行する必要があります。つまり、特定のメッセージグループがキューから消費されるレートを実行時に設定する機能です。
たとえば、1秒間に10個消費されるメッセージのグループ、1秒間に1個消費される別のグループなどを追加します。
ラクダにルートを設定し、キューなどにメッセージをグループ化する基本を知っていますが、ドキュメントからこれを理解することはできません。
解決
ええ、消費者がブロックしないようにブローカー側の調整を探しているようです。
ActiveMQ user / devフォーラムでリクエストを提出しましたか?
他のヒント
Camelの既存のスロットルを使用してから、タイプごとに異なるキューを使用できます。異なるスロットルレートを設定する必要があるメッセージの数
e.g。
from("activemq:Queue1.Input").
throttle(20).
to("activemq:Queue1.Output");
from("activemq:Queue2.Input").
throttle(5).
to("activemq:Queue2.Output");
Apache Camel JIRAにRFEを追加しませんか?
メッセージの特定のグループのレートを決定するためのロジックは何ですか?
メッセージの異なるグループが同じスロットルを通過する場合、複雑になる可能性があります。どのグループに属しているか、したがってどのレートがスロットルを通過する必要があるかを判断するために、弁別器が必要です。
ユースケースを記入してRFEを記録するのに時間がかかる場合、Camelコミュニティ、開発者が支援できると確信しています。
自分で実装してみることができます。基本的に何でもプロセッサなので、from(<!> quot; activemq:queue:foo <!> quot;)。process(myOwnThrottler).to(<!> quot; bean:handleMessage <!> quot; );
Camelのいくつかのクラスを拡張できます。 -DelegateProcessor -DelayProcessorSupport -スロットル
クラウス・イプセン Apache Camel Committer
オープンソース統合: http://fusesource.com ブログ: http://davsclaus.blogspot.com/
OK、シナリオをもう少し詳しく説明し、わかりやすい範囲でメインブロッカーを強調します。
メッセージの2つのグループ(実際にははるかに大きいスケール)があり、それぞれ異なる調整要件があります-たとえば、メッセージヘッダーでこれをflowRateおよびflowTimeとして指定します。
- グループ1:FlowRate = 1; flowTime = 60(1分あたり1)
- グループ2:FlowRate = 1; flowTime = 1 (1秒あたり1)
Claus に従ってプロセッサを実装します。これはヘッダーフィールドを調べ、遅延入力として使用します。
グループ1から20000メッセージ、グループ2から20000メッセージを追加します
スロットルはコンシューマー側であるため、グループ1によってアクティブ化された遅延器は、入力バッファーをすぐにいっぱいにして遅延を引き起こし、グループ2のメッセージはスタックします... ジェームス。
JMXGroupIDヘッダーを使用してメッセージをグループ化し、複数のコンシューマーを実装できることを認識していますが、それが n グループに対応するための要件に対応するとは思いません。
基本的に、私が思っていたのは、消費者側の調整や、消費者が最終的にブロックすることなく調整できる他のソリューションではなく、ブローカーを行う方法があるかどうかです
希望を明確に説明し、これまでの提案に感謝します。