6.2. Publish-Subscribe Channel
概要
図6.2「Publish Subscribe Channel パターン」 に示されているPublish-Subscribe Channel は、複数のサブスクライバーが任意のメッセージを消費できるようにする 「メッセージチャネル」 です。これは、「Point-to-Point Channel」 とは対照的です。Publish-Subscribe Channel は、複数のサブスクライバーにイベントや通知をブロードキャストする方法として頻繁に使用されます。
図6.2 Publish Subscribe Channel パターン
Publish-Subscribe Channel をサポートするコンポーネント
以下の Apache Camel コンポーネントは、Publish Subscribe Channel パターンをサポートします。
JMS
JMS では、パブリッシュサブスクライブチャネルは トピック で表されます。たとえば、StockQuotes
という JMS トピックのエンドポイント URI を指定できます。
jms:topic:StockQuotes
詳細は、Apache Camel コンポーネントリファレンスガイド の Jms を参照してください。
ActiveMQ
ActiveMQ では、Publish-Subscribe Channel はトピックで表されます。たとえば、以下のように StockQuotes
という ActiveMQ トピックのエンドポイント URI を指定できます。
activemq:topic:StockQuotes
詳細は、Apache Camel コンポーネントリファレンスガイド の ActiveMQ を参照してください。
XMPP
XMPP (Jabber) コンポーネントは、グループ通信モードで使用される場合に Publish Subscribe Channel パターンをサポートします。詳細は、Apache Camel コンポーネントリファレンスガイド の Xmpp を参照してください。
静的サブスクリプションリスト
必要に応じて、Apache Camel アプリケーション内にパブリッシュサブスクライブロジックを実装することもできます。簡単な方法として、ルートの最後にターゲットのエンドポイントがすべて明示的にリストされる 静的サブスクリプションリスト を定義する方法があります。ただし、この方法は JMS または ActiveMQ トピックほど柔軟ではありません。
Java DSL の例
以下の Java DSL 例は、Publish-Subscribe Channel を単一のパブリッシャー seda:a
と 3 つのサブスクライバー seda:b
、seda:c
、および seda:d
でシミュレートする方法を示しています。
from("seda:a").to("seda:b", "seda:c", "seda:d");
これは InOnly メッセージ交換パターンでのみ機能します。
XML 設定の例
以下の例は、XML で同じルートを設定する方法を示しています。
<camelContext id="buildStaticRecipientList" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="seda:a"/> <to uri="seda:b"/> <to uri="seda:c"/> <to uri="seda:d"/> </route> </camelContext>