2

メッセージキューを分割するための標準的な知恵と考慮事項は何ですか?

メッセージの数が比較的少ない(<1000 /日)と仮定すると、複数のメッセージタイプを1つのキューに結合し、コンシューマーにセレクターを使用してそれらをフィルター処理させることは理にかなっていますか?または、単一のキューは単一のメッセージタイプのみを処理する必要がありますか?

私が考えることができるいくつかの可能な考慮事項:

  • 少なくともActiveMQに関する私の限られた知識では、読み取り/書き込みセキュリティはキューごとにあるように見えます。したがって、異なる読み取り/書き込み権限を必要とするメッセージタイプには、異なるキューが必要になります。
  • メッセージセレクタは、フィルタリングするために標準のヘッダー値(MessageType:AbcMessage)を必要とするようです。
  • キューの爆発的増加(> 10、> 100、> 1000?)は、メッセージの爆発的増加よりもパフォーマンスに影響を与えるようです
  • キューごとに1つのメッセージタイプを使用すると、クライアントコードを記述しやすくなります。キュー上の各メッセージを処理するだけです。別のメッセージタイプが必要な場合は、別のキューにサブスクライブします。
  • ???
4

2 に答える 2

1

どのMQシステムも、どのキューでも何百万ものメッセージを処理できるはずです。私はまったく心配していません。

私は、セレクターについて心配するよりも、明確な現実世界の意味を持つキューを好みます。セレクターを使用したり、消費して再キューイングしたりする本当の理由があることは知っていますが、キューを区別して、選択について心配する必要はありません。

于 2010-10-11T16:40:04.657 に答える
1

これは実際には対処されておらず、あなたはあなたの質問でそれについて尋ねたので(そしてこれを見つけたときに私が探していたものでした)、単一の異種キューでメッセージをフィルタリングする方法についてチャイムを鳴らすことができると思いましたタイプ別。

ここを見ると、と呼ばれるすべてのメッセージでユーザー定義のプロパティを使用できることがわかりますJMSType。これはaStringであり、デフォルトでは空です。mapメッセージを送信するときは、プロデューサーに、またはなどの合意された値に設定してtextもらいます。次に、コンシューマーで、受信するメッセージの種類に応じて特定のメッセージセレクターを使用します。同じ例を使用すると、JMSType = 'map'またはになりますJMSType = 'text'

ActiveMQ-CPPライブラリを使用して、JavaプロデューサーとC++コンシューマーでこの手法を正常に使用することができました。

于 2012-09-20T15:15:09.303 に答える