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 服务器
- 停止 JBoss EAP 6.4 服务器。
备份 HornetQ 日志和配置文件。
-
默认情况下,HornetQ 日志位于
EAP6_HOME/standalone/data/
目录中。 - 请参阅每个发行版本的默认消息传递文件夹位置映射消息传递文件夹名称。
-
默认情况下,HornetQ 日志位于
-
确保 JBoss EAP 6.4 服务器上定义了包含 JMS 消息的
InQueue
JMS 队列。 确保
消息传递
子系统配置包含RemoteConnectionFactory
的条目,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有包含该条目,请使用以下管理 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)
/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 Copied! Toggle word wrap Toggle overflow
配置目标 JBoss EAP 7.x 服务器
JMS 网桥配置需要
org.hornetq
模块来连接上一发行版中的 HornetQ 服务器。JBoss EAP 7.x 中不存在此模块及其直接依赖项,因此您必须从上一发行版中复制以下模块:将
org.hornetq
模块复制到 JBoss EAP 7.xEAP_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 6.4 服务器复制此文件夹:EAP
从 JBoss EAP 7.x
EAP_HOME/modules/hornetq/main/module.xml
文件中删除HornetQ
;。lib
路径的 <resource-root>如果您没有将补丁应用到 JBoss EAP 6.4
org.hornetq
模块,请从文件中删除以下行:<resource-root path="lib"/>
<resource-root path="lib"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您对 JBoss EAP 6.4
org.hornetq
模块应用了补丁程序,请从文件中删除以下行:<resource-root path="lib"/> <resource-root path="../../../../../org/hornetq/main/lib"/>
<resource-root path="lib"/> <resource-root path="../../../../../org/hornetq/main/lib"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告如果无法删除 HornetQ
lib
pathresource-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"
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 Copied! Toggle word wrap Toggle overflow
将
org.jboss.netty
模块复制到 JBoss EAP 7.xEAP_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
-
如果您没有在此模块应用补丁,请从 JBoss EAP 6.4 服务器复制此文件夹:EAP
创建 JMS 队列,以包含从 JBoss EAP 6.4 服务器接收的消息。以下是管理 CLI 命令的示例,它可创建
MigratedMessagesQueue
JMS 队列来接收消息:jms-queue add --queue-address=MigratedMessagesQueue --entries=[jms/queue/MigratedMessagesQueue java:jboss/exported/jms/queue/MigratedMessagesQueue]
jms-queue add --queue-address=MigratedMessagesQueue --entries=[jms/queue/MigratedMessagesQueue java:jboss/exported/jms/queue/MigratedMessagesQueue]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会在 JBoss EAP 7.x 服务器的
messaging
配置。-activemq
子系统中为默认服务器创建以下jms-queue<jms-queue name="MigratedMessagesQueue" entries="jms/queue/MigratedMessagesQueue java:jboss/exported/jms/queue/MigratedMessagesQueue"/>
<jms-queue name="MigratedMessagesQueue" entries="jms/queue/MigratedMessagesQueue java:jboss/exported/jms/queue/MigratedMessagesQueue"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保
messaging-activemq
子系统默认
服务器包含InVmConnectionFactory
connection-factory
的配置,类似于如下:<connection-factory name="InVmConnectionFactory" factory-type="XA_GENERIC" entries="java:/ConnectionFactory" connectors="in-vm"/>
<connection-factory name="InVmConnectionFactory" factory-type="XA_GENERIC" entries="java:/ConnectionFactory" connectors="in-vm"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有包含该条目,请使用以下管理 CLI 命令创建一个:
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:add(factory-type=XA_GENERIC, connectors=[in-vm], entries=[java:/ConnectionFactory])
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:add(factory-type=XA_GENERIC, connectors=[in-vm], entries=[java:/ConnectionFactory])
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建和部署 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)
/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 Copied! Toggle word wrap Toggle overflow 这会在 JBoss EAP 7.x 服务器的
messaging-activemq
子系统中创建以下jms-bridge
配置。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果为 JBoss EAP 6.4 配置安全性,您还必须将 JMS 网桥配置
<source> 元素
配置为包含source-context
,以指定在创建连接时要用于 JNDI 查找的正确用户名和密码。
迁移消息传递数据
验证您为以下配置提供的信息正确无误。
- 任何队列和主题名称。
-
用于 JNDI 查找的
java.naming.provider.url
。
- 确保已将目标 JMS 目标部署到 JBoss EAP 7.x 服务器。
- 同时启动 JBoss EAP 6.4 和 JBoss EAP 7.x 服务器。