0

問題:

各メッセージに「サービス」、「クライアント」、「ストリーム」の 3 つのヘッダーがあるメッセージのバックログを処理します。メッセージのバックログを最大限の並行性で処理したいのですが、いくつかの要件があります。

  • 一度に処理できるのは、同じサービスの 10 件のメッセージのみです。
  • 一度に処理できるのは、同じサービスとクライアントを持つ 4 つのメッセージのみです。
  • 同じサービスとクライアントとストリームを持つすべてのメッセージは、順番に保持する必要があります。

追加情報:

ServiceMix (Camel + ActiveMQ) コンテキストで「JMSXGroupID」とともに「maxConcurrentConsumers」をいじってみましたが、要件の 3 つのうち 2 つを満たすことができるようです。

たとえば、バックログを個別の「サービス」キュー (サービスごとに 1 つのキュー) に分割するコンテンツ ベースのルーティングを行う場合、JMSXGroupID を (サービス + クライアント + ストリーム) に設定し、maxConcurrentConsumers=10 を設定できます。各キューから消費するルート。これにより、最初と最後の要件は解決されますが、同じクライアントが同時に処理するメッセージが多すぎる可能性があります。

ソリューションがサービスとクライアントのすべての組み合わせに対して個別のキューとルートを必要とする場合、何万もの組み合わせが存在する可能性があるため、管理が困難になることに注意してください。

どんなフィードバックでも大歓迎です! 私の質問が不明な場合は、どのように改善できるかをお気軽に提案してください。

4

1 に答える 1

0

私の知る限り、10k以上のコンボがある場合、これを達成するのは非常に困難です。

コンシューマーとセレクターを使用すると、サービス/クライアントの組み合わせごとに1つのキューを回避できます。ただし、一度にアクティブになる限られたサービス/クライアントのセットを何らかの方法で予測できない場合は、ほぼ同じように対処するのが困難になります(1万以上のセレクターコンシューマーを無傷で、パフォーマンスを大幅に考慮せずに作成することはありません)。

2番目の要件について詳しく説明していただけますか?クライアントの間にある程度の公平感があることを確認するためにそれが必要ですか?詳しく説明してください。他に何か考えられることがあれば更新します。

更新:メッセージを聞くだけで消費する代わりに、キューを参照してメッセージをループし、「空きスロットがある」メッセージを選択することができます。単一のインスタンスで実行した場合に追跡する共有変数が制限に達しているかどうかを判断できる可能性があります。

于 2013-01-06T20:28:48.107 に答える