第 27 章 配置 JMS 网桥


JBoss EAP 消息传递包括功能齐全的 JMS 消息网桥。JMS 网桥的功能是使用来自源队列或主题的消息,并将它们发送到目标队列或主题,通常在不同的服务器上。

如果源目的地是一个主题,JMS 网桥会为其创建一个订阅。如果为 JMS 网桥配置了 client -id 和 subscription-name 属性,则订阅具有持久性。这意味着,如果 JMS 网桥停止然后重新启动,则不会错过任何消息。

源和目标服务器不必位于同一集群中,这使得桥接适合从一个集群将消息可靠发送到另一个集群,例如跨 WAN 以及连接不可靠的地方。

注意

不要将 JMS 网桥与核心网桥混淆。JMS 网桥可用于桥接任何两个 JMS 1.1 兼容 JMS 提供程序并使用 JMS API。核心网桥用于桥接任何两个 JBoss EAP 消息传递实例并使用核心 API。最好尽可能使用核心网桥,而不是 JMS 网桥。

以下是 JBoss EAP JMS 网桥的示例配置:

<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>
Copy to Clipboard Toggle word wrap

使用管理 CLI 添加 JMS 网桥

可以使用下列管理 CLI 命令添加 JMS 网桥:请注意,源和目标目的地必须在配置中定义。有关可配置属性的完整列表,请参见附录中的表

/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})
Copy to Clipboard Toggle word wrap

您可以在管理 CLI 中使用 read-resource 命令检查 JMS 网桥的配置,如下例所示:

/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:read-resource
Copy to Clipboard Toggle word wrap

使用 write-attribute 将配置添加到 JMS 网桥,如下例所示:

/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:write-attribute(name=ATTRIBUTE,value=VALUE)
Copy to Clipboard Toggle word wrap

使用管理控制台添加 JMS 网桥

您还可以按照下列步骤使用管理控制台添加 JMS 网桥。

  1. 在浏览器中打开管理控制台,再导航到 Configuration Subsystems Messaging(ActiveMQ) JMS Bridge
  2. 单击添加(+)按钮,然后在出现提示时提供所需的信息。
  3. 完成后,单击 Add

27.1. 服务质量

在 JBoss EAP 中,服务质量是一种 可配置的属性,决定了消息的使用和确认方式。服务质量及其 描述的有效值如下所示。有关 JMS 网桥属性的完整列表,请参见附录中的 表

AT_MOST_ONCE

消息将在最多一次从来源到达目的地。消息从来源使用,并在发送到目的地之前确认。因此,如果在从源中删除消息到到达目的地之间发生故障,可能会丢失消息。这个模式是默认值。

此模式适用于持久和非持久消息。

DUPLICATES_OK

消息从源使用,然后在成功发送到目的地后进行确认。因此,如果在发送初始消息之后但在确认之前发生错误,则有可能再次发送消息。

此模式适用于持久和非持久消息。

ONCE_AND_ONLY_ONCE

消息将从源一次且仅一次到达目的地。如果源和目标在同一服务器实例上,可以通过发送和确认同一本地事务中的消息来实现。如果来源和目标在不同的服务器上,可以通过在 JTA 事务中放入发送和消耗会话来实现。JTA 事务由 JTA 交易管理器控制,该管理器需要使用桥上的 setTransactionManager() 方法进行设置。

此模式仅适用于持久消息。

警告

在关闭部署了 JMS 网桥的服务器时,quality -of-service 属性设置为 ONCE_AND_ONLY_ONCE 时,务必先使用 JMS 网桥关闭服务器,以避免意外错误。

通过使用 DUPLICATES_OK 模式而不是 ONCE_AND_ ONLY_ONCE,然后检查目的地是否有重复项并丢弃它们,可以提供一次且仅一次的语义。如需更多信息,请参阅配置重复消息检测。但是,缓存仅在一定时间内有效。因此,这种方法不再像使用 ONCE_AND_ONLY_ONCE 一样好,但根据您的特定应用需求,这可能是一个不错的选择。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat