2016-03-24 11 views
1

1つのプロデューサと1つのコンシューマを持つメッセージングキューが、タイムアウトポリシーを適用して配信保証付きの非同期要求に使用しています。これらのメッセージの順序は意味をなさない。すべてのメッセージは互いに分離されており、独自のビジネスシナリオを持っています。だから、私はメッセージングキューで順序を必要としません。しかし、問題は、配信できない最初のメッセージによってキューがブロックされることです。他のメッセージは正しいものであり、正しい方法で処理する準備が整っていますが、配信される "悪い"メッセージを待たなければなりません。ActiveMQでの注文を抑制する方法は?

キューのクライアント側にJavaとJMSを持つSpring。

オーダーなしでActiveMQキューを作成することはできますが、各メッセージの再配信タイムアウトは個別に設定できますか?

答えて

2

これを解決する最善の方法は、キューごとのメッセージタイプまたは他の類似した論理パーティショニングをキューセット全体で使用することです。

JMSキューは、名前が示すとおり、正確に機能します。メッセージの優先順位を使用してメッセージをジャンプさせるオプションが1つありますが、キューの深さなどに応じて多くの制限があります。

ドメインをいくつかの論理セットに分割し、各。

+0

はい、私は論理的な1つのメッセージ、つまり1つのキューを考えましたが、それは "ハッキー"に見えます(申し訳ありませんが、より適切な単語を英語で作成できません)。キューの数が何千にもなると、ActiveMQはどのように振舞うのですか?古いキューを削除したり、数千のプールを管理したり、このプールにメッセージをディスパッチするためのロジックが必要なようです。 つまり、回避策がありますが、もっと複雑になるはずです。 – Donz

+0

そして、私は優先順位をつけてプレイしようとしました。古いものがまだ配信されなかった場合、ActiveMQは新しいメッセージの優先度を高くして何もしません。 – Donz

+0

ドキュメントを読むと、その両方の質問の答えがあります –

0

「FIFO」シナリオになっていますか?つまり、処理オーダーを保存する必要がありますか?そうでない場合は、待ち行列の複数のコンシューマ(WebSphereの複数のMDBインスタンス、アクティブ化仕様のサーバごとに「スレーブ数」を設定するなど)を開始し、異なるJMS優先順位をメッセージに割り当てて、「より緊急な」メッセージを最初に処理します。

+0

いいえ、私が質問したように、私は全く注文する必要はないので、FIFOはありません。私はプロデューサーと唯一の消費者しか持っていません。それは私自身のミニ統合バスです。 私は優先的にプレイしようとしましたが、それは2つの問題です: 1.すべてのメッセージの優先度は同じです。優先度を使用する唯一の方法 - メッセージが配信されないたびに減らします。 2.動作しません。いくつかのメッセージが配信プロセスに取り込まれた場合、優先順位にかかわらず新しいメッセージは最初のメッセージがキューから出るまで処理されません。 – Donz

関連する問題