パブリッシュ / サブスクライブドメインでは、メッセージプロデューサはパブリッシャーと呼ばれ、メッセージコンシューマはサブスクライバと呼ばれます。これらは、トピックと呼ばれる送信先を使用してメッセージを交換します。パブリッシャーは、トピックへメッセージをプロデュースし、サブスクライバはトピックへサブスクライブして、トピックからメッセージをコンシュームします。
図 2–3 に、パブリッシュ / サブスクライブドメインの単純なメッセージング操作を示します。MyTopicPublisher は、Msg1 を送信先 MyTopic へパブリッシュします。続いて、MyTopicSubscriber1 と MyTopicSubscriber2 はそれぞれ、 MyTopic から Msg1 のコピーを受信します。
パブリッシュ / サブスクライブモデルでは、複数のサブスクライバが必要になるわけではありませんが、このドメインが複数のメッセージをブロードキャストできることを強調するために、図では 2 つのサブスクライバを示しています。トピックに対応するすべてのサブスクライバが、このトピックへパブリッシュされた任意のメッセージのコピーを取得します。
サブスクライバは、非永続でも永続でもかまいません。ブローカは、すべてのアクティブなサブスクライバのメッセージを保持しますが、非アクティブなサブスクライバのメッセージは、これらのサブスクライバが永続である場合にのみ保持します。
図 2–4 に、このパターンによって実現する可能性を表すために、より複雑なパブリッシュ / サブスクライブメッセージングのイメージを示します。複数のプロデューサがメッセージを Topic1 送信先にパブリッシュします。複数のサブスクライバが、Topic1 送信先からメッセージをコンシュームします。サブスクライバがセレクタを使用してメッセージをフィルタ処理しないかぎり、各サブスクライバは、選択したトピックへパブリッシュされたすべてのメッセージを取得します。図 2–4 では、MyTSubscriber2 は Msg2 をフィルタで除外しています。
この複雑な図では、パブリッシュ / サブスクライブメッセージングに関するその他の要点が多数示されています。
複数のプロデューサから 1 つのトピックにメッセージをパブリッシュできる。プロデューサは、1 つのコネクションを共有することも、別々のコネクションを使用することもできますが、すべてが同じトピックにアクセスできます。
複数のサブスクライバが 1 つのトピックからメッセージをコンシュームできる。サブスクライバは、セレクタを使用してメッセージをフィルタで除外したり、コンシューム前にメッセージの有効期限が切れないかぎり、トピックへパブリッシュされたすべてのメッセージを取得します。
サブスクライバは、1 つのコネクションを共有することも、別々のコネクションを使用することもできるが、すべてが同じトピックにアクセスできる。
永続サブスクライバは、アクティブでも非アクティブでもかまわない。非アクティブの間、サブスクライバへのメッセージはブローカが保持します。
パブリッシャーとサブスクライバは、実行時に、動的に追加および削除できるので、必要に応じて、メッセージングシステムを拡張したり縮小したりできる。
メッセージは、送信順にトピックへパブリッシュされるが、コンシュームされる順番は、メッセージの有効期限、メッセージの優先度、メッセージのコンシュームでセレクタを使用するかどうかなどの要因によって決まる。
パブリッシャーとサブスクライバはタイミング依存性がある。トピックサブスクライバは、サブスクリプションの作成後にパブリッシュされたメッセージだけをコンシュームできます。
パブリッシュ / サブスクライブモデルの主要なメリットは、複数のサブスクライバへメッセージをブロードキャストできるという点です。