第 27 章 配置 Jakarta 消息传递网桥
JBoss EAP 消息传递包含 Jakarta 消息传递网桥,该网桥从源目的地获取消息,并将它们发送到目标目的地,通常是在不同服务器上。
Jakarta 消息传递网桥支持目标映射,其中每个链接都由以下定义的源和目标组成:
- 该源定义 Jakarta 消息传递网桥从中接收消息的目的地。源由连接工厂组成,用于创建与 Jakarta 消息传递提供程序的连接,以及该提供程序中的消息源目的地。
- 目标定义 Jakarta 消息传递网桥将消息从源发送到的目的地。目标由连接工厂组成,用于创建与 Jakarta 消息传递提供程序的连接,以及该提供程序中的消息目标目的地。
如果源目的地是一个主题,Jakarta Messaging 网桥会为其创建订阅。如果为 Jakarta Messaging 网桥配置了 client 属性,则订阅具有持久性。这意味着,如果 Jakarta 消息传递网桥停止然后重新启动,不会遗漏任何消息。
-id 和 subscription-name
源和目标服务器不必位于同一集群中,这使得桥接适合从一个集群将消息可靠发送到另一个集群,例如跨 WAN 以及连接不可靠的地方。
不要将 Jakarta 消息传递网桥与核心网桥混淆。Jakarta 消息传递网桥可用于桥接任何与 Jakarta Messaging-1.1 兼容的提供程序,并使用 Jakarta Messaging API。配置核心网桥 用于桥接任意两个 JBoss EAP 消息传递实例,并使用核心 API。在可能的情况下,使用核心网桥而不是 Jakarta 消息传递网桥。
JBoss EAP Jakarta Messaging 网桥配置示例
在上例配置中,Jakarta Messaging 网桥使用 connection-factory 属性来创建以下两个连接:
- source-context,用于定义收到的消息的原始目的地。
- target-context,用于定义接收消息的目标目的地。
您可以使用 Apache ActiveMQ Artemis 或 Red Hat AMQ 提供的默认实施,通过使用 Java 命名和目录接口(JNDI)搜索连接工厂。对于其他应用服务器或 Jakarta 消息传递提供程序,您可以通过实施接口 org.apache.activemq.artemis.jms.bridge.ConnectionFactoryFactory 来提供新的实施。
使用管理 CLI 添加 Jakarta 消息传递网桥
可以使用以下管理 CLI 命令来添加 Jakarta 消息传递网桥:请注意,源和目标目的地必须在配置中定义。有关可配置属性的完整列表,请参见 附录中的表。
/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:add(quality-of-service=AT_MOST_ONCE,module=org.apache.activemq.artemis,failure-retry-interval=500,max-retries=1,max-batch-size=10,max-batch-time=100,source-connection-factory=ConnectionFactory,source-destination=jms/queue/InQueue,source-context={},target-connection-factory=jms/RemoteConnectionFactory,target-destination=jms/queue/OutQueue,target-context={java.naming.factory.initial=org.wildfly.naming.client.WildFlyInitialContextFactory,java.naming.provider.url=http-remoting://192.168.40.1:8080})
/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:add(quality-of-service=AT_MOST_ONCE,module=org.apache.activemq.artemis,failure-retry-interval=500,max-retries=1,max-batch-size=10,max-batch-time=100,source-connection-factory=ConnectionFactory,source-destination=jms/queue/InQueue,source-context={},target-connection-factory=jms/RemoteConnectionFactory,target-destination=jms/queue/OutQueue,target-context={java.naming.factory.initial=org.wildfly.naming.client.WildFlyInitialContextFactory,java.naming.provider.url=http-remoting://192.168.40.1:8080})
您可以在管理 CLI 中使用 read-resource 命令检查 Jakarta Messaging 网桥的配置,如下例所示。
/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:read-resource
/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:read-resource
使用 write-attribute 将配置添加到 Jakarta 消息传递网桥,如本例中所示:
/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:write-attribute(name=ATTRIBUTE,value=VALUE)
/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:write-attribute(name=ATTRIBUTE,value=VALUE)
使用管理控制台添加 Jakarta 消息传递网桥
您还可以按照下列步骤使用管理控制台添加 Jakarta 消息传递网桥。
-
在浏览器中打开管理控制台,再导航到 Configuration
Subsystems Messaging(ActiveMQ) JMS Bridge。 - 单击添加(+)按钮,然后在出现提示时提供所需的信息。
- 完成后,单击 Add。
27.1. 服务质量 复制链接链接已复制到粘贴板!
在 JBoss EAP 中,服务质量是一种 可配置的属性,决定了消息的使用和确认方式。服务质量及其 描述的有效值如下所示。有关 Jakarta Messaging 网桥属性的完整列表,请参见 附录中的表。
- AT_MOST_ONCE
消息将在最多一次从来源到达目的地。消息从来源使用,并在发送到目的地之前确认。因此,如果在从源中删除消息到到达目的地之间发生故障,可能会丢失消息。这个模式是默认值。
此模式适用于持久和非持久消息。
- DUPLICATES_OK
消息从源使用,然后在成功发送到目的地后进行确认。因此,如果在发送初始消息之后但在确认之前发生错误,则有可能再次发送消息。
此模式适用于持久和非持久消息。
- ONCE_AND_ONLY_ONCE
消息将从源一次且仅一次到达目的地。如果源和目标在同一服务器实例上,可以通过发送和确认同一本地事务中的消息来实现。如果来源和目标位于不同的服务器上,则可通过在 Jakarta Transactions 发起发送和消费会话来实现。事务由交易管理器控制,需要使用网桥上的
setTransactionManager()方法设置。此模式仅适用于持久消息。
警告在关闭部署了 Jakarta 消息传递网桥的服务器
时,确保首先使用 Jakarta 消息传递网桥将服务器关闭,以避免意外错误。
通过使用 DUPLICATES_OK 模式而不是 ,然后检查目的地是否有重复项并丢弃它们,可以提供一次且仅一次的语义。如需更多信息 ,请参阅配置重复消息检测。但是,缓存仅在一定时间内有效。因此,这种方法不再像使用 ONCE_AND_ ONLY_ONCEONCE_AND_ONLY_ONCE 一样好,但根据您的特定应用需求,这可能是一个不错的选择。