3.2.7.2. 配置 JMS 桥以移植现有的 JMS 消息到到 JBoss EAP 6
JBoss EAP 6 将 JBoss Messaging 替换为 HornetQ 以作为默认的 JMS 实现。从一个环境移植 JMS 消息到另外一个环境的最简单的方法是使用 JMS 桥。JMS 桥的功能是从源 JMS 目的地消费消息并发送到目标 JMS 目的地。你可以配置和部署 JMS 桥到 JBoss EAP 5.x 或 JBoss EAP 6.1 服务器及更高版本里。下面的过程描述如何实现这一点。
过程 3.19. 配置部署到 JBoss EAP 5.x 服务器上的 JMS 桥
为了避免版本间类的冲突,你必须使用下列过程在 JBoss EAP 5.x 里配置 JMS 桥。SAR 目录和桥的名称可以是任意的,也可以进行修改。
- 在 JBoss EAP 5 的 deploy 目录里创建一个子目录来包含 SAR,如
EAP5_HOME/server/PROFILE_NAME/deploy/myBridge.sar。 - 在
EAP5_HOME/server/PROFILE_NAME/deploy/myBridge.sar/里创建一个名为META-INF的子目录。 - 在
EAP5_HOME/server/PROFILE_NAME/deploy/myBridge.sar/META-INF/目录里创建一个包含类似于下列信息的jboss-service.xml文件。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意
使用<load-repository>是为了确保 SAR 具有独立的类加载器。请注意,JNDI 查找和桥 "target" 都包括用户 "jbossuser"(密码 "jbosspass")的安全性凭证。这是因为 JBoss EAP 6 默认是设置了安全性的。用户 "jbossuser" 和密码 "jbosspass" 都是在具有guest角色的ApplicationRealm里使用EAP_HOME/bin/add_user.sh脚本创建的。 - 将下列 JAR 从
EAP_HOME/modules/system/layers/base/目录复制到EAP5_HOME/server/PROFILE_NAME/deploy/myBridge.sar/目录。用实际的版本号替换每个 VERSION_NUMBER。org/hornetq/main/hornetq-core-VERSION_NUMBER.jarorg/hornetq/main/hornetq-jms-VERSION_NUMBER.jarorg/jboss/ejb-client/main/jboss-ejb-client-VERSION_NUMBER.jarorg/jboss/logging/main/jboss-logging-VERSION_NUMBER.jarorg/jboss/logmanager/main/jboss-logmanager-VERSION_NUMBER.jarorg/jboss/marshalling/main/jboss-marshalling-VERSION_NUMBER.jarorg/jboss/marshalling/river/main/jboss-marshalling-river-VERSION_NUMBER.jarorg/jboss/remote-naming/main/jboss-remote-naming-VERSION_NUMBER.jarorg/jboss/remoting3/main/jboss-remoting-VERSION_NUMBER.jarorg/jboss/sasl/main/jboss-sasl-VERSION_NUMBER.jarorg/jboss/netty/main/netty-VERSION_NUMBER.jarorg/jboss/remoting3/remote-jmx/main/remoting-jmx-VERSION_NUMBER.jarorg/jboss/xnio/main/xnio-api-VERSION_NUMBER.jarorg/jboss/xnio/nio/main.xnio-nio-VERSION_NUMBER.jar
注意
请不要简单地复制EAP_HOME/bin/client/jboss-client.jar,因为 javax API 类会和 JBoss EAP 5.x 里的类相冲突。
过程 3.20. 配置部署到 JBoss EAP 6.x 服务器上的 JMS 桥
在 JBoss EAP 6.1 以后的版本里,JMS 桥可以用于从任何兼容 JMS 1.1 的服务器上桥接消息。因为源和目标 JMS 资源是用 JNDI 进行查找的,源消息供应商或消息中介的 JNDI 查找类必须捆绑在 JBoss 模块里。下面的过程使用了虚拟的 'MyCustomMQ' 消息中介作为例子。
- 为消息供应商创建 JBoss 模块。
- 在
EAP_HOME/modules/system/layers/base/下为新的模块创建一个目录结构。main/子目录将包含客户 JAR 和module.xml文件。下面是为消息供应商 MyCustomMQ 创建的一个目录结构示例:EAP_HOME/modules/system/layers/base/org/mycustommq/main/。 - 在
main/子目录里,创建一个包含消息供应商的模块定义的module.xml文件。下面是为消息供应商 MyCustomMQ 创建的module.xml示例。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 从源资源复制消息供应商用于 JNDI 查找的的 JAR 到模块的
main/子目录。MyCustomMQ 模块的目录结构应该类似于:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 配置部署到 JBoss EAP 6 服务器的
messaging子系统的 JMS 桥。- 在开始之前,请先停止服务器并备份当前的服务器配置文件。如果是作为独立服务器运行,它是
EAP_HOME/standalone/configuration/standalone-full-ha.xml。如果是运行的受管域,请备份EAP_HOME/domain/configuration/domain.xml以及EAP_HOME/domain/configuration/host.xml。 - 在服务器配置文件里的
messaging子系统里添加<jms-bridge>元素。<source>和<target>元素提供的用于 JNDI 查找的 JMS 资源的名称。如果指定了<user>和<password>凭证,当创建 JMS 连接时它们会作为参数传入。下面是一个为消息供应商 MyCustomMQ 配置的<jms-bridge>元素例子:在上面的例子里,JNDI 属性是在Copy to Clipboard Copied! Toggle word wrap Toggle overflow <source>的<context>元素里定义的。如上面的<target>例子,如果忽略了<context>元素,JMS 资源将在本地实例里进行查找。