4.9.2.2. 使用 JMS 网桥迁移消息传递数据


使用此方法,您可以配置 JMS 网桥并将其部署到 JBoss EAP 7.x 服务器。JMS 网桥将消息从 JBoss EAP 6.4 HornetQ 队列移动到 JBoss EAP 7.x ActiveMQ Artemis 队列。

JMS 网桥使用来自源 JMS 队列或主题的消息,并将它们发送到目标 JMS 队列或主题,而这通常在不同的服务器上。它可用于在任何 JMS 服务器之间桥接消息,只要它们兼容 JMS 1.1。使用 JNDI 查找来源和目标 JMS 资源,并且 JNDI 查找的客户端类必须捆绑到模块中。然后,JMS 网桥配置中声明模块名称。

本节介绍如何配置服务器和部署 JMS 网桥,将消息传递数据从 JBoss EAP 6.4 移到 JBoss EAP 7.x。

配置源 JBoss EAP 6.4 服务器
  1. 停止 JBoss EAP 6.4 服务器。
  2. 备份 HornetQ 日志和配置文件。

  3. 确保 JBoss EAP 6.4 服务器上定义了包含 JMS 消息的 InQueue JMS 队列。
  4. 确保 消息传递 子系统配置包含 RemoteConnectionFactory 的条目,如下所示:

    <connection-factory name="RemoteConnectionFactory">
        <entries>
            <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
        </entries>
        ...
    </connection-factory>
    Copy to Clipboard Toggle word wrap

    如果没有包含该条目,请使用以下管理 CLI 命令创建一个:

    /subsystem=messaging/hornetq-server=default/connection-factory=RemoteConnectionFactory:add(factory-type=XA_GENERIC, connector=[netty], entries=[java:jboss/exported/jms/RemoteConnectionFactory],ha=true,block-on-acknowledge=true,retry-interval=1000,retry-interval-multiplier=1.0,reconnect-attempts=-1)
    Copy to Clipboard Toggle word wrap
配置目标 JBoss EAP 7.x 服务器
  1. JMS 网桥配置需要 org.hornetq 模块来连接上一发行版中的 HornetQ 服务器。JBoss EAP 7.x 中不存在此模块及其直接依赖项,因此您必须从上一发行版中复制以下模块:

    • org.hornetq 模块复制到 JBoss EAP 7.x EAP_HOME/modules/org/ 目录中。

      • 如果您没有在此模块应用补丁,请从 JBoss EAP 6.4 服务器复制此文件夹:EAP 6_HOME/modules/system/layers/base/org/hornetq/
      • 如果您已将补丁应用到此模块,请从 JBoss EAP 6.4 服务器复制此文件夹:EAP 6_HOME/modules/system/layers/base/.overlays/layer-base-jboss-eap-6.x.CP/org/hornetq/
    • 从 JBoss EAP 7.x EAP_HOME/modules/hornetq/main/module.xml 文件中删除 HornetQ lib 路径的 <resource-root&gt;。

      • 如果您没有将补丁应用到 JBoss EAP 6.4 org.hornetq 模块,请从文件中删除以下行:

        <resource-root path="lib"/>
        Copy to Clipboard Toggle word wrap
      • 如果您对 JBoss EAP 6.4 org.hornetq 模块应用了补丁程序,请从文件中删除以下行:

        <resource-root path="lib"/>
        <resource-root path="../../../../../org/hornetq/main/lib"/>
        Copy to Clipboard Toggle word wrap
        警告

        如果无法删除 HornetQ lib path resource-root,则会导致网桥失败,并在日志文件中显示以下错误:

        2016-07-15 09:32:25,660 ERROR [org.jboss.as.controller.management-operation] (management-handler-thread - 2) WFLYCTL0013: Operation ("add") failed - address: ([
            ("subsystem" => "messaging-activemq"),
            ("jms-bridge" => "myBridge")
        ]) - failure description: "WFLYMSGAMQ0086: Unable to load module org.hornetq"
        Copy to Clipboard Toggle word wrap
    • org.jboss.netty 模块复制到 JBoss EAP 7.x EAP_HOME/modules/org/jboss/ 目录中。

      • 如果您没有在此模块应用补丁,请从 JBoss EAP 6.4 服务器复制此文件夹:EAP 6_HOME/modules/system/layers/base/org/jboss/netty/
      • 如果您已将补丁应用到此模块,请从 JBoss EAP 6.4 服务器复制此文件夹:EAP 6_HOME/modules/system/layers/base/.overlays/layer-base-jboss-eap-6.x.CP/org/jboss/netty
  2. 创建 JMS 队列,以包含从 JBoss EAP 6.4 服务器接收的消息。以下是管理 CLI 命令的示例,它可创建 MigratedMessagesQueue JMS 队列来接收消息:

    jms-queue add --queue-address=MigratedMessagesQueue --entries=[jms/queue/MigratedMessagesQueue java:jboss/exported/jms/queue/MigratedMessagesQueue]
    Copy to Clipboard Toggle word wrap

    这会在 JBoss EAP 7.x 服务器的 messaging -activemq 子系统中为默认服务器创建以下jms-queue 配置。

    <jms-queue name="MigratedMessagesQueue" entries="jms/queue/MigratedMessagesQueue java:jboss/exported/jms/queue/MigratedMessagesQueue"/>
    Copy to Clipboard Toggle word wrap
  3. 确保 messaging-activemq 子系统 默认 服务器包含 InVmConnectionFactory connection-factory 的配置,类似于如下:

    <connection-factory name="InVmConnectionFactory" factory-type="XA_GENERIC" entries="java:/ConnectionFactory" connectors="in-vm"/>
    Copy to Clipboard Toggle word wrap

    如果没有包含该条目,请使用以下管理 CLI 命令创建一个:

    /subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:add(factory-type=XA_GENERIC, connectors=[in-vm], entries=[java:/ConnectionFactory])
    Copy to Clipboard Toggle word wrap
  4. 创建和部署 JMS 网桥,它将读取来自 JBoss EAP 6.4 服务器上配置的 InQueue JMS 队列的消息,并将它们传输到 JBoss EAP 7.x 服务器上配置的 MigizeMessagesQueue

    /subsystem=messaging-activemq/jms-bridge=myBridge:add(add-messageID-in-header=true,max-batch-time=100,max-batch-size=10,max-retries=-1,failure-retry-interval=1000,quality-of-service=AT_MOST_ONCE,module=org.hornetq,source-destination=jms/queue/InQueue,source-connection-factory=jms/RemoteConnectionFactory,source-context=[("java.naming.factory.initial"=>"org.wildfly.naming.client.WildFlyInitialContextFactory"),("java.naming.provider.url"=>"remote://127.0.0.1:4447")],target-destination=jms/queue/MigratedMessagesQueue,target-connection-factory=java:/ConnectionFactory)
    Copy to Clipboard Toggle word wrap

    这会在 JBoss EAP 7.x 服务器的 messaging-activemq 子系统中创建以下 jms-bridge 配置。

    <jms-bridge name="myBridge" add-messageID-in-header="true" max-batch-time="100" max-batch-size="10" max-retries="-1" failure-retry-interval="1000" quality-of-service="AT_MOST_ONCE" module="org.hornetq">
        <source destination="jms/queue/InQueue" connection-factory="jms/RemoteConnectionFactory">
            <source-context>
                <property name="java.naming.factory.initial" value="org.wildfly.naming.client.WildFlyInitialContextFactory"/>
                <property name="java.naming.provider.url" value="remote://127.0.0.1:4447"/>
            </source-context>
        </source>
        <target destination="jms/queue/MigratedMessagesQueue" connection-factory="java:/ConnectionFactory"/>
    </jms-bridge>
    Copy to Clipboard Toggle word wrap
  5. 如果为 JBoss EAP 6.4 配置安全性,您还必须将 JMS 网桥配置 <source> 元素 配置为包含 source-context,以指定在创建连接时要用于 JNDI 查找的正确用户名和密码。
迁移消息传递数据
  1. 验证您为以下配置提供的信息正确无误。

    • 任何队列和主题名称。
    • 用于 JNDI 查找的 java.naming.provider.url
  2. 确保已将目标 JMS 目标部署到 JBoss EAP 7.x 服务器。
  3. 同时启动 JBoss EAP 6.4 和 JBoss EAP 7.x 服务器。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat