20.9.2. 创建 JMS 桥


介绍

JMS 桥消费源 JMS 队列或主题里的消息并发送到目标 JMS 队列或主题(通常位于不同的服务器上)。它可以用于桥接 任何 JMS 服务器间的消息,只要这些消息是兼容 JMS 1.1 的。源和目的 JMS 资源通过 JNDI 查找,用于 JNDI 查找的客户类必须捆绑在模块里。然后在 JMS 桥配置里声明模块名。

过程 20.2. 创建 JMS 桥

这个过程演示了如何配置 JMS 桥从 JBoss EAP 5.x 移植消息到 JBoss EAP 6 服务器。
  1. 在源 JMS 消息服务器上配置桥

    请使用源服务器提供的说明配置 JMS 桥。关于如何在 JBoss EAP 5.x 上配置 JMS 桥的例子,请参考《JBoss EAP 6 移植指南》里的 Create a JMS Bridge 章节。
  2. 配置目的 JBoss EAP 6 服务器上的 JMS 桥

    在 JBoss EAP 6.1 以后的版本里,JMS 桥可以用于从任何兼容 JMS 1.1 的服务器上桥接消息。因为源和目标 JMS 资源是用 JNDI 进行查找的,源消息供应商或消息中介的 JNDI 查找类必须捆绑在 JBoss 模块里。下面的过程使用了虚拟的 'MyCustomMQ' 消息中介作为例子。
    1. 为消息供应商创建 JBoss 模块。
      1. EAP_HOME/modules/system/layers/base/ 下为新的模块创建一个目录结构。main/ 子目录将包含客户 JAR 和 module.xml 文件。下面是为消息供应商 MyCustomMQ 创建的一个目录结构示例:EAP_HOME/modules/system/layers/base/org/mycustommq/main/
      2. main/ 子目录里,创建一个包含消息供应商的模块定义的 module.xml 文件。下面是为消息供应商 MyCustomMQ 创建的 module.xml 示例。
        <?xml version="1.0" encoding="UTF-8"?>
        <module xmlns="urn:jboss:module:1.1" name="org.mycustommq">
            <properties>
                <property name="jboss.api" value="private"/>
            </properties> 
        
            <resources>
                <!-- Insert resources required to connect to the source or target   -->
                <resource-root path="mycustommq-1.2.3.jar" />
                <resource-root path="mylogapi-0.0.1.jar" />
            </resources> 
        
            <dependencies>
               <!-- Add the dependencies required by JMS Bridge code                 -->
               <module name="javax.api" />
               <module name="javax.jms.api" />
               <module name="javax.transaction.api"/>
               <!-- Add a dependency on the org.hornetq module since we send         -->
               <!-- messages tothe HornetQ server embedded in the local EAP instance -->
               <module name="org.hornetq" />
            </dependencies>
        </module>
        
        
        Copy to Clipboard Toggle word wrap
      3. 从源资源复制消息供应商用于 JNDI 查找的的 JAR 到模块的 main/ 子目录。MyCustomMQ 模块的目录结构应该类似于:
        modules/
        `-- system
            `-- layers
                `-- base
                    `-- org
                          `-- mycustommq
                              `-- main
                                  |-- mycustommq-1.2.3.jar
                                  |-- mylogapi-0.0.1.jar
                                  |-- module.xml
        
        Copy to Clipboard Toggle word wrap
    2. 配置部署到 JBoss EAP 6 服务器的 messaging 子系统的 JMS 桥。
      1. 在开始之前,请先停止服务器并备份当前的服务器配置文件。如果是作为独立服务器运行,它是 EAP_HOME/standalone/configuration/standalone-full-ha.xml。如果是运行的受管域,请备份 EAP_HOME/domain/configuration/domain.xml 以及 EAP_HOME/domain/configuration/host.xml
      2. 在服务器配置文件里的 messaging 子系统里添加 jms-bridge 元素。sourcetarget 元素提供的用于 JNDI 查找的 JMS 资源的名称。如果指定了 userpassword 凭证,当创建 JMS 连接时它们会作为参数传入。
        下面是一个为消息供应商 MyCustomMQ 配置的 jms-bridge 元素例子:
        <subsystem xmlns="urn:jboss:domain:messaging:1.3">
           ...
           <jms-bridge name="myBridge" module="org.mycustommq">
              <source>
                 <connection-factory name="ConnectionFactory"/>
                 <destination name="sourceQ"/>
                 <user>user1</user>
                 <password>pwd1</password>
                 <context>
                    <property key="java.naming.factory.initial" value="org.mycustommq.jndi.MyCustomMQInitialContextFactory"/>
                    <property key="java.naming.provider.url"    value="tcp://127.0.0.1:9292"/>
                 </context>
              </source>
              <target>
                 <connection-factory name="java:/ConnectionFactory"/>
                 <destination name="/jms/targetQ"/>
              </target>
              <quality-of-service>DUPLICATES_OK</quality-of-service>
              <failure-retry-interval>500</failure-retry-interval>
              <max-retries>1</max-retries>
              <max-batch-size>500</max-batch-size>
              <max-batch-time>500</max-batch-time>
              <add-messageID-in-header>true</add-messageID-in-header>
           </jms-bridge>
        </subsystem>
        
        
        Copy to Clipboard Toggle word wrap
        在上面的例子里,JNDI 属性是在 sourcecontext 元素里定义的。如上面的 target 例子,如果忽略了 context 元素,JMS 资源将在本地实例里进行查找。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat