2

私は特定のシナリオを念頭に置いたActiveMQ/Camel noobです。まず、それが可能かどうか、次に誰かが少し指示を与える可能性があるかどうか疑問に思います。

基本的に、キューから動的スロットリングを実行する必要があります。IEは、特定のメッセージグループがキューから消費される速度を実行時に設定する機能です。

たとえば、1秒あたり10で消費されるメッセージのグループ、1秒あたり1で消費される別のグループなどを追加する場合があります。

キャメルでのルートの設定やキューへのメッセージのグループ化などの基本は知っていますが、ドキュメントからこれを理解することはできません。

4

4 に答える 4

4

Camel の既存のスロットルを使用してから、異なるスロットル レートを設定する必要があるメッセージの種類ごとに異なるキューを使用できますか?

例えば

from("activemq:Queue1.Input").
    throttle(20).
    to("activemq:Queue1.Output");  
from("activemq:Queue2.Input").
    throttle(5).
    to("activemq:Queue2.Output");  
于 2009-01-19T12:38:16.483 に答える
3

Apache Camel JIRA に RFE を追加してみませんか?

特定のメッセージ グループのレートを決定するためのロジックは何ですか?

異なるグループのメッセージが同じスロットラーを通過する場合、複雑になる可能性があります。メッセージがどのグループに属しているかを判断し、どのレートでスロットラーを渡す必要があるかを判断するには、ディスクリミネーターが必要です。

ユース ケースを入力して RFE をログに記録するのに時間がかかる場合は、Camel コミュニティや開発者が役立つと確信しています。

自分で実装してみることができます。基本的に何でもプロセッサーなので、 from("activemq:queue:foo").process(myOwnThrottler).to("bean:handleMessage"); を実行できます。

Camel のいくつかのクラスを拡張できます: - DelegateProcessor - DelayProcessorSupport - Throttler


Claus Ibsen Apache Camel コミッター

オープンソース統合: http://fusesource.com ブログ: http://davsclaus.blogspot.com/

于 2009-01-18T09:08:40.610 に答える
1

ええ、消費者がブロックするのを避けるために、ブローカー側のスロットリングを探しているようです。

ActiveMQ ユーザー/開発者フォーラムでリクエストを提出しましたか?

于 2009-02-17T05:25:24.243 に答える
0

OK、シナリオをもう少し詳しく説明し、私が知る限りメインブロッカーを強調します。

私には2つのメッセージグループがあり(実際にはスケールがはるかに大きくなっています)、それぞれに異なるスロットリング要件があります-たとえば、メッセージヘッダーでこれをflowRateおよびflowTimeとして指定します。

  • グループ1:FlowRate = 1; flowTime = 60(1分あたり1)
  • グループ2:FlowRate = 1; flowTime = 1(1秒あたり1)

ヘッダーフィールドを調べて遅延入力として使用するClausに従ってProcessorを実装します。

グループ1から20000メッセージ、グループ2から20000メッセージを追加します

スロットルはコンシューマー側であるため、グループ1によってアクティブ化された遅延は、入力バッファーをすばやく埋めることによって速度を低下させ、グループ2のメッセージはスタックします... Jamesのように複数のキューを使用している場合でも。

JMXGroupIDヘッダーを使用してメッセージをグループ化し、複数のコンシューマーを実装できることは理解していますが、n個のグループに対応するための要件に対応できるとは思いません。

私が疑問に思っていたのは、基本的に、消費者側のスロットルや、消費者が最終的にブロックすることなくスロットルできる他のソリューションではなく、ブローカーを実行する方法があるかどうかです。

私が自分自身を明確に説明し、これまでの提案に感謝していることを願っています。

于 2009-01-20T21:24:45.500 に答える