JMSトピックとキュー


191

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

ActiveMQページは言う

トピック

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

キュー

JMSキューは、ロードバランサーのセマンティクスを実装します。単一のメッセージがちょうど1つのコンシューマによって受信されます。メッセージの送信時に利用可能なコンシューマーがない場合は、メッセージを処理できるコンシューマーが利用可能になるまで保持されます。コンシューマーがメッセージを受信し、閉じる前に確認しない場合、メッセージは別のコンシューマーに再配信されます。キューには多数のコンシューマーがあり、利用可能なコンシューマー間でメッセージの負荷が分散されます。

ActiveMQブローカーがメッセージを受信したのと同じシーケンスで各サブスクライバーにメッセージのコピーを送信する「何か」が欲しいのですが。

何かご意見は?

回答:


147

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


4
JMSまたはWSO2 MBのキューのロードバランシングはどのように機能しますか?
Kulasangar

サブスクライバーをデバッグしようとしていて、トピックを送信するときにサブスクライバーが呼び出されなかったが、キューに送信するときに機能した
vmrvictor

54

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


30

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

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

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


27

それはそのように簡単です:

キュー =挿入>取り消し(単一のサブスクライバーに送信)1:1

トピック =挿入>ブロードキャスト(すべてのサブスクライバーに送信)1:n

ここに画像の説明を入力してください


2
例としては、単純なソーシャルネットワークがあります。誰かが投稿を「好き」です。バックエンドは「POST LIKE」イベントをトピックに公開します。それは3人の購読者によって消費されます:(notificationProcessorポスターに通知を送信する)、karmaProcessor(カルマをいいねとポスターに与える)、feedProcessor(人々のフィードに上向きに移動します)。もちろん、すべて非同期です。
シッダールタ

@Siddhartha、これは例に包まれた答えになる可能性があります、ありがとう!
selem mn


7

キュー

長所

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

短所

  • 1人の消費者だけがメッセージを受け取ることができます
  • 1対1の関係であるため、生産者と消費者の間の結合を意味します

トピック

長所

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

短所

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

4

N個のコンシューマーがある場合:

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

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

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


1

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


-1

キューは、サブスクライバーが消費するのを待っているメッセージを保持するために使用されるJMS管理対象オブジェクトです。すべてのサブスクライバーがメッセージを消費すると、メッセージはキューから削除されます。

トピックとは、メッセージがパブリッシュされたときに、トピックのすべてのサブスクライバーが同じメッセージを受信することです。


2
キューメッセージは、単一のコンシューマによって一度だけ消費されます。そのため、キューはロードバランサを実装します。トピックサブスクリプションは永続的である可能があります。たとえば、サブスクライバがシャットダウンされて再び起動した場合など、サブスクライバはパブリケーションのずっと後にメッセージを受信できます。
グルーバー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.