JMSキューとJMSトピックの違いは何だろうと思っていました。
ActiveMQページ 言う
トピック
JMSでは、トピックはpublishおよびsubscribeセマンティクスを実装します。メッセージを公開すると、関心のあるすべてのサブスクライバーに送信されます。したがって、ゼロから多くのサブスクライバーがメッセージのコピーを受け取ります。ブローカーがメッセージを受信したときにアクティブなサブスクリプションを持っていたサブスクライバーのみがメッセージのコピーを取得します。
キュー
JMSキューはロードバランサーセマンティクスを実装します。 1人の消費者が1つのメッセージを受信します。メッセージの送信時に利用可能なコンシューマが存在しない場合、メッセージを処理できるコンシューマが利用可能になるまで保持されます。消費者がメッセージを受信し、閉じる前に確認しない場合、メッセージは別の消費者に再配信されます。キューには、利用可能なコンシューマ全体でメッセージ負荷分散を持つ多くのコンシューマを含めることができます。
ActiveMQブローカーがメッセージを受信した順序と同じ順序で、各サブスクライバーにメッセージのコピーを送信する「何か」が必要です。
何かご意見は?
つまり、トピックは適切です。キューは、メッセージが唯一の可能なサブスクライバーに送信されることを意味します。トピックは、すべてのサブスクライバーに送信されます。
トピックはパブリッシャー-サブスクライバーモデル用であり、キューはポイントツーポイント用です。
JMSトピックは、1対多の分布モデルにおける宛先のタイプです。同じパブリッシュされたメッセージは、すべての消費者subscribersによって受信されます。これを「ブロードキャスト」モデルと呼ぶこともできます。トピックは、分散コンピューティングの Observerデザインパターン のSubjectに相当するものと考えることができます。一部のJMSプロバイダーは、これをTCPではなくUDPとして効率的に実装することを選択します。トピックのメッセージ配信は「火と忘れ」です-誰も聞いていない場合、メッセージは消えます。それが望んでいない場合は、「永続サブスクリプション」を使用できます。
JMSキューは、1対1のメッセージの宛先です。メッセージは、消費するreceiversの1つだけで受信されます(注:一貫してsubscribersを「トピッククライアント」に使用し、receiversを使用して、キュークライアントは混乱を回避します)。キューに送信されたメッセージは、誰かがピックアップするか期限切れになるまでディスクまたはメモリに保存されます。そのため、キュー(および永続サブスクリプション)にはアクティブなストレージ管理が必要です。遅いコンシューマーについて考える必要があります。
ほとんどの環境では、topicsがより良い選択であると主張します。アーキテクチャを変更せずにいつでも追加のコンポーネントを追加できるからです。追加されるコンポーネントには、監視、ロギング、分析などがあります。1年、5年、10年で要件がどのようになるかは、プロジェクトの始めには決してわかりません。変更は避けられない、受け入れてください:-)
順序の保存については、 このActiveMQページ を参照してください。つまり、単一の消費者の順序は保持されますが、複数の消費者の場合、配信の順序は保証されません。
N人の消費者がいる場合:
JMSトピックはNのNにメッセージを配信しますJMSキューはNの1にメッセージを配信します
あなたは「メッセージがActiveMQブローカーによって受信された順序と同じ順序で各サブスクライバーにメッセージのコピーを送信する「もの」を探している」と言いました。
したがって、N個すべてのサブスクライバーがメッセージのコピーを取得するために、トピックを使用する必要があります。
キュー
長所
短所
トピック
長所
短所
トピック::トピックは1対多のコミュニケーション...(マルチポイントまたはパブリッシュ/サブスクライブ)EX:-パブリッシャーがYouTubeで映画をパブリッシュすると、すべてのサブスクライバーが通知を受け取ります。..QUEVE :: queveは1対1 -1つの通信...例:-リチャージのリクエストを発行すると、1人のqrecieverのみに送信されます...リクエストがすべてのqreceiverに送信されると、アプリケーションに適した分析の開発中に複数のリチャージが発生したことを常に覚えておいてください