web-dev-qa-db-ja.com

JMSトピックとキュー

JMSキューとJMSトピックの違いは何だろうと思っていました。

ActiveMQページ 言う

トピック

JMSでは、トピックはpublishおよびsubscribeセマンティクスを実装します。メッセージを公開すると、関心のあるすべてのサブスクライバーに送信されます。したがって、ゼロから多くのサブスクライバーがメッセージのコピーを受け取ります。ブローカーがメッセージを受信したときにアクティブなサブスクリプションを持っていたサブスクライバーのみがメッセージのコピーを取得します。

キュー

JMSキューはロードバランサーセマンティクスを実装します。 1人の消費者が1つのメッセージを受信します。メッセージの送信時に利用可能なコンシューマが存在しない場合、メッセージを処理できるコンシューマが利用可能になるまで保持されます。消費者がメッセージを受信し、閉じる前に確認しない場合、メッセージは別の消費者に再配信されます。キューには、利用可能なコンシューマ全体でメッセージ負荷分散を持つ多くのコンシューマを含めることができます。

ActiveMQブローカーがメッセージを受信した順序と同じ順序で、各サブスクライバーにメッセージのコピーを送信する「何か」が必要です。

何かご意見は?

155
Poliquin

つまり、トピックは適切です。キューは、メッセージが唯一の可能なサブスクライバーに送信されることを意味します。トピックは、すべてのサブスクライバーに送信されます。

116
Joseph Ottinger

トピックはパブリッシャー-サブスクライバーモデル用であり、キューはポイントツーポイント用です。

45
vikram

JMSトピックは、1対多の分布モデルにおける宛先のタイプです。同じパブリッシュされたメッセージは、すべての消費者subscribersによって受信されます。これを「ブロードキャスト」モデルと呼ぶこともできます。トピックは、分散コンピューティングの ObserverデザインパターンSubjectに相当するものと考えることができます。一部のJMSプロバイダーは、これをTCPではなくUDPとして効率的に実装することを選択します。トピックのメッセージ配信は「火と忘れ」です-誰も聞いていない場合、メッセージは消えます。それが望んでいない場合は、「永続サブスクリプション」を使用できます。

JMSキューは、1対1のメッセージの宛先です。メッセージは、消費するreceiversの1つだけで受信されます(注:一貫してsubscribersを「トピッククライアント」に使用し、receiversを使用して、キュークライアントは混乱を回避します)。キューに送信されたメッセージは、誰かがピックアップするか期限切れになるまでディスクまたはメモリに保存されます。そのため、キュー(および永続サブスクリプション)にはアクティブなストレージ管理が必要です。遅いコンシューマーについて考える必要があります。

ほとんどの環境では、topicsがより良い選択であると主張します。アーキテクチャを変更せずにいつでも追加のコンポーネントを追加できるからです。追加されるコンポーネントには、監視、ロギング、分析などがあります。1年、5年、10年で要件がどのようになるかは、プロジェクトの始めには決してわかりません。変更は避けられない、受け入れてください:-)

22
Axel Podehl

順序の保存については、 このActiveMQページ を参照してください。つまり、単一の消費者の順序は保持されますが、複数の消費者の場合、配信の順序は保証されません。

8
eebbesen

それは簡単です:

Queues= Insert> Withdraw(send to single subscriber)1:1

Topics= Insert> Broadcast(すべてのサブスクライバーに送信)1:n

enter image description here

5
Daniel Perník

N人の消費者がいる場合:

JMSトピックはNのNにメッセージを配信しますJMSキューはNの1にメッセージを配信します

あなたは「メッセージがActiveMQブローカーによって受信された順序と同じ順序で各サブスクライバーにメッセージのコピーを送信する「もの」を探している」と言いました。

したがって、N個すべてのサブスクライバーがメッセージのコピーを取得するために、トピックを使用する必要があります。

3
Hans Jespersen

キュー

長所

  • 透過的な通信フローを備えたシンプルなメッセージングパターン
  • メッセージをキューに戻すことで回復できます

短所

  • 1人の消費者のみがメッセージを取得できます
  • 1対1の関係であるため、プロデューサーとコンシューマー間のカップリングを意味します

トピック

長所

  • 複数の消費者がメッセージを取得できます
  • プロデューサーとコンシューマーの分離(パブリッシュアンドサブスクライブパターン)

短所

  • より複雑な通信フロー
  • 単一のリスナーのメッセージは回復できません
2
abhimanyu

トピック::トピックは1対多のコミュニケーション...(マルチポイントまたはパブリッシュ/サブスクライブ)EX:-パブリッシャーがYouTubeで映画をパブリッシュすると、すべてのサブスクライバーが通知を受け取ります。..QUEVE :: queveは1対1 -1つの通信...例:-リチャージのリクエストを発行すると、1人のqrecieverのみに送信されます...リクエストがすべてのqreceiverに送信されると、アプリケーションに適した分析の開発中に複数のリチャージが発生したことを常に覚えておいてください

1