第 27 章 配置 Jakarta 消息传递网桥
JBoss EAP 消息传递包含 Jakarta 消息传递网桥,该网桥从源目的地获取消息,并将它们发送到目标目的地,通常是在不同服务器上。
Jakarta 消息传递网桥支持目标映射,其中每个链接都由以下定义的源和目标组成:
该源定义 Jakarta 消息传递网桥从中接收消息的目的地。源由连接工厂组成,用于创建与 Jakarta 消息传递提供程序的连接,以及该提供程序中的消息源目的地。
目标定义 Jakarta 消息传递网桥将消息从源发送到的目的地。目标由连接工厂组成,用于创建与 Jakarta 消息传递提供程序的连接,以及该提供程序中的消息目标目的地。
如果源目的地是一个主题,Jakarta Messaging 网桥会为其创建订阅。如果为 Jakarta Messaging 网桥配置了
client
属性,则订阅具有持久性。这意味着,如果 Jakarta 消息传递网桥停止然后重新启动,不会遗漏任何消息。
源和目标服务器不必位于同一集群中,这使得桥接适合从一个集群将消息可靠发送到另一个集群,例如跨 WAN 以及连接不可靠的地方。
不要将 Jakarta 消息传递网桥与核心网桥混淆。Jakarta 消息传递网桥可用于桥接任何与 Jakarta Messaging-1.1 兼容的提供程序,并使用 Jakarta Messaging API。
配置核心网桥
用于桥接任意两个 JBoss EAP 消息传递实例,并使用核心 API。在可能的情况下,使用核心网桥而不是 Jakarta 消息传递网桥。
-id
和 subscription-name
JBoss EAP Jakarta Messaging 网桥配置示例
<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> <server name="default"> </server> <jms-bridge name="my-jms-bridge" module="org.apache.activemq.artemis" max-batch-time="100" max-batch-size="10" max-retries="1" failure-retry-interval="500" quality-of-service="AT_MOST_ONCE"> <source destination="jms/queue/InQueue" connection-factory="ConnectionFactory"> <source-context/> </source> <target destination="jms/queue/OutQueue" connection-factory="jms/RemoteConnectionFactory"> <target-context> <property name="java.naming.factory.initial" value="org.wildfly.naming.client.WildFlyInitialContextFactory"/> <property name="java.naming.provider.url" value="http-remoting://192.168.40.1:8080"/> </target-context> </target> </jms-bridge> </subsystem>在上例配置中,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})
您可以在管理 CLI 中使用
read-resource 命令检查
Jakarta Messaging 网桥的配置,如下例所示。
/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)
使用管理控制台添加 Jakarta 消息传递网桥
您还可以按照下列步骤使用管理控制台添加 Jakarta 消息传递网桥。
在浏览器中打开管理控制台,再导航到
Configuration
27.1. 服务质量
在 JBoss EAP
中,服务质量是一种
可配置的属性,决定了消息的使用和确认方式。
服务质量及其
描述的有效值如下所示。有关 Jakarta Messaging 网桥属性的完整列表,请参见
附录中的表
。
- AT_MOST_ONCE
-
消息将在最多一次从来源到达目的地。消息从来源使用,并在发送到目的地之前确认。因此,如果在从源中删除消息到到达目的地之间发生故障,可能会丢失消息。这个模式是默认值。 此模式适用于持久和非持久消息。
- DUPLICATES_OK
-
消息从源使用,然后在成功发送到目的地后进行确认。因此,如果在发送初始消息之后但在确认之前发生错误,则有可能再次发送消息。 此模式适用于持久和非持久消息。
- ONCE_AND_ONLY_ONCE
-
消息将从源一次且仅一次到达目的地。如果源和目标在同一服务器实例上,可以通过发送和确认同一本地事务中的消息来实现。如果来源和目标位于不同的服务器上,则可通过在 Jakarta Transactions 发起发送和消费会话来实现。事务由交易管理器控制,需要使用网桥上的
setTransactionManager()
方法设置。 此模式仅适用于持久消息。