第 27 章 配置 Jakarta 消息传递网桥


JBoss EAP 消息传递包含 Jakarta 消息传递网桥,该网桥从源目的地获取消息,并将它们发送到目标目的地,通常是在不同服务器上。

Jakarta 消息传递网桥支持目标映射,其中每个链接都由以下定义的源和目标组成:

  • 该源定义 Jakarta 消息传递网桥从中接收消息的目的地。源由连接工厂组成,用于创建与 Jakarta 消息传递提供程序的连接,以及该提供程序中的消息源目的地。
  • 目标定义 Jakarta 消息传递网桥将消息从源发送到的目的地。目标由连接工厂组成,用于创建与 Jakarta 消息传递提供程序的连接,以及该提供程序中的消息目标目的地。

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

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

注意

不要将 Jakarta 消息传递网桥与核心网桥混淆。Jakarta 消息传递网桥可用于桥接任何与 Jakarta Messaging-1.1 兼容的提供程序,并使用 Jakarta Messaging API。配置核心网桥 用于桥接任意两个 JBoss EAP 消息传递实例,并使用核心 API。在可能的情况下,使用核心网桥而不是 Jakarta 消息传递网桥。

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

在上例配置中,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})
Copy to Clipboard Toggle word wrap

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

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

使用 write-attribute 将配置添加到 Jakarta 消息传递网桥,如本例中所示:

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

使用管理控制台添加 Jakarta 消息传递网桥

您还可以按照下列步骤使用管理控制台添加 Jakarta 消息传递网桥。

  1. 在浏览器中打开管理控制台,再导航到 Configuration Subsystems Messaging(ActiveMQ) JMS Bridge
  2. 单击添加(+)按钮,然后在出现提示时提供所需的信息。
  3. 完成后,单击 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_ONCE,然后检查目的地是否有重复项并丢弃它们,可以提供一次且仅一次的语义。如需更多信息 ,请参阅配置重复消息检测。但是,缓存仅在一定时间内有效。因此,这种方法不再像使用 ONCE_AND_ONLY_ONCE 一样好,但根据您的特定应用需求,这可能是一个不错的选择。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部