6.2. publish-Subscribe Channel
概述
在 图 6.2 “发布 Subscribe Channel Pattern” 中显示的 发布订阅频道 是一个 第 5.2 节 “Message Channel”,它允许多个订阅者使用任何给定消息。这与 第 6.1 节 “point-to-Point Channel” 相反。发布订阅通道经常用作将事件或通知广播到多个订阅者的方法。
图 6.2. 发布 Subscribe Channel Pattern
支持发布订阅频道的组件
以下 Apache Camel 组件支持 publish-subscribe 频道模式:
- JMS
- ActiveMQ
- XMPP
- 在同一 CamelContext 中使用 SEDA 的 SEDA (可以在 pub-sub 中工作),但允许多个消费者。
- 请参阅 Apache Camel 组件参考指南中作为 SEDA 的虚拟机,但在同一 JVM 中使用。https://access.redhat.com/documentation/zh-cn/red_hat_fuse/7.12/html-single/apache_camel_component_reference/index#vm-component
JMS
在 JMS 中,发布订阅通道由 主题 代表。例如,您可以为名为 StockQuotes
的 JMS 主题指定端点 URI,如下所示:
jms:topic:StockQuotes
如需了解更多详细信息,请参阅 Apache Camel 组件参考指南 中的 Jms。
ActiveMQ
在 ActiveMQ 中,发布订阅通道由主题表示。例如,您可以为名为 StockQuotes
的 ActiveMQ 主题指定端点 URI,如下所示:
activemq:topic:StockQuotes
如需了解更多详细信息,请参阅 Apache Camel 组件参考指南 中的 ActiveMQ。
XMPP
XMPP (Jabber)组件在组通信模式中使用时支持 publish-subscribe 频道模式。如需了解更多详细信息,请参阅 Apache Camel 组件参考指南中的 Xmpp。
静态订阅列表
如果您愿意,也可以在 Apache Camel 应用程序本身中实施发布订阅逻辑。简单的方法是定义一个 静态订阅列表,其中目标端点都在路由末尾明确列出。但是,这种方法不像 JMS 或 ActiveMQ 主题一样灵活。
Java DSL 示例
以下 Java DSL 示例演示了如何使用单一发布者、seda:a
和三个订阅者 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>