使用 WebSphere MQ 实现队列管理器别名和集群

本文介绍如何在 WebSphere MQ V6 和 V7 中设置队列管理器别名,介绍它们对集群化环境和负载平衡的重要性。然后介绍两个负载平衡场景 -- 集群外的队列管理器与内部的队列管理器通信,以及集群内的队列管理器与外部的队列管理器通信。

Arundeep B. Veerabhadriah, 认证 IT 专家, IBM

Arundeep B. Veerabhadriah 的照片Arundeep B. Veerabhadraiah 是一位经过认证的 IT 专家,专门研究 WebSphere Message Broker 和 WebSphere MQ。他拥有伊利诺斯州大学计算机科学专业理学硕士学位,在企业应用程序集成方面拥有 7 年经验。



2013 年 3 月 07 日

简介

假设客户有一个重要应用程序使用 IBM® WebSphere® MQ 作为消息传递系统,需要升级现有的分布式排队环境以处理新业务和确保高可用性。作为升级的一部分,现有环境中的一些队列管理器将作为一个集群的一部分,另一些队列管理器将单独提供。本文将介绍 IBM 提出的一种概念证明设计。

队列管理器别名定义

队列管理器别名定义有 3 个用途:

  • 在发送消息时,重新映射队列管理器名称
  • 在发送消息时,修改或指定传输队列
  • 在接收消息时,定义本地队列管理器是否是这些消息的想要的目标

传出消息:重新映射队列管理器名称

队列管理器别名定义可用于重新映射一个 MQOPEN 调用中指定的队列管理器名称。例如,一个 MQOPEN 调用指定一个队列名称 APPQ 和一个队列管理器名称 EARTH。目标队列管理器有一个类似这样的队列管理器别名定义:

DEFINE QREMOTE (EARTH) RQMNAME(MARS)

此定义指定,当应用程序将消息放入队列管理器 EARTH 中时,将要使用的队列管理器是 MARS。如果本地队列管理器为 EARTH,则会将消息放入本地队列 APPQ 中。如果本地队列管理器的名称不是 EARTH,则会将消息路由到一个名为 MARS 的传输队列,方法是更改传输标头,以表明是 MARS 而不是 EARTH。

传入消息:确定目标

一个接收消息渠道代理 (MCA) 打开传输标头中引用的队列。如果存在一个与所引用队列管理器同名的队列管理器别名定义,那么传输标头中收到的队列管理器名称就会替换为来自该定义的 RQMNAME。此机制有两种用途:

  • 将消息发送给另一个队列管理器
  • 将队列管理器名称修改为与本地队列管理器相同

传出消息:修改或指定传输队列

图 1 显示了一种场景,其中消息将到达队列管理器 QM1,显示队列名称的传输标头将到达队列管理器 QM3。QM3 将以多跳 (multi-hopping) 方式通过 QM2 到达:

图 1
图 1

传给 QM3 的所有消息都在 QM1 上捕获,其中队列管理器别名为 QM3,包含通过传输队列 QM2 的定义 QM3。该定义类似于:

DEFINE QREMOTE (QM3) RNAME(' ') RQMNAME(QM3) XMITQ(QM2)

队列管理器将消息放在传输队列 QM2 上,但不会更改传输队列标头,因为目标队列管理器的名称 QM3 没有更改。

所有到达 QM1 且在 QM2 处显示一个包含队列名的传输标头的消息也会放在 QM2 传输队列上。通过这种方式,具有不同目标的消息会被收集到针对一个合适的邻近系统的公共传输队列上,以便转发到它们的目的地。

与集群内的队列管理器通信

环境中有 4 个队列管理器:MERCURY、VENUS、EARTH 和 MARS。这些队列管理器都是一个名为 PLANETS 的集群的一部分。APP.LOCAL 队列是在所有 4 个队列管理器上定义的一个应用程序队列。名为 APP1 的应用程序连接到队列管理器 JUPITER。该应用程序将消息放在远程队列 APP1.REMOTE 上。目标队列是集群队列 APP.LOCAL,托管在集群中的 4 个队列管理器之上。消息将跨队列管理器进行负载平衡。队列管理器 MARS 充当着一个网关队列管理器。配置如图 2 所示:

图 2
图 2

配置队列管理器别名

  1. 使用以下命令创建一个名为 MARS 的网关队列管理器:
    crtmqm MARS
  2. 将 MARS 添加到集群 PLANETS 中(部分存储库),方法是创建 EARTH 队列管理器的集群发送者和集群接收者渠道:
    DEFINE CHANNEL(TO.MARS) CHLTYPE(CLUSRCVR) CONNAME(’10.7.0.100(1415)’) +  
         CLUSTER(PLANETS)
    DEFINE CHANNEL(TO.EARTH) CHLTYPE(CLUSSDR) + CONNAME(’10.7.0.112(2222)’)  
         CLUSTER(PLANETS)
  3. 在应用程序队列管理器 JUPITER 与 MARS 队列管理器之间创建双向连接。
  4. 在 JUPITER 队列管理器上使用 RQMNAME MARS 定义一个远程队列 APP1.REMOTE:
    DEFINE QR(APP1.REMOTE) RNAME(APP.LOCAL) RQMNAME(PLANETSGW) XMITQ(MARS)
  5. 在 MERCURY、VENUS 和 EARTH 队列管理器上定义一个集群本地队列 APP.LOCAL。
  6. 在集群网关队列管理器 MARS 上定义一个队列管理器:
    DEFINE QR(PLANETSGW) RNAME(‘ ‘) RQMNAME(‘ ‘)

您现在使用队列管理器别名在 4 个队列管理器之间设置了负载平衡。

与集群外部的队列管理器通信

总共有 7 个队列管理器:MERCURY、VENUS、EARTH、MARS、JUPITER、SATURN 和 URANUS。这些队列管理器不是任何集群的一部分。

提议的设计需要 4 个队列管理器 MERCURY、VENUS、EARTH 和 MARS 包含在集群 PLANET 中,JUPITER 队列管理器可以充当一个网关队列管理器。其他队列管理器将是独立的。

3 个应用程序(App1、App2 和 App3)将分别连接到集群队列管理器 MERCURY、VENUS 和 EARTH。这些应用程序将消息放入在其队列管理器上定义的远程队列上,这个远程队列进而指向在集群外运行的队列管理器上托管的应用程序队列。下表和图总结了哪些应用程序正在放入消息以及这些消息的最终目的地:

应用程序名称本地队列管理器远程队列目标队列管理器目标队列名称
APP1MERCURYAPP1.QR1JUPITERAPPA.QL1
APP2VENUSAPP2.QR1SATURNAPPB.QL1
APP3EARTHAPP3.QR1URANUSAPPC.QL1
图 3
图 3

消息通过网关队列管理器 MARS 路由到目标队列管理器。队列管理器别名的概念用于将消息路由到目标队列管理器。表 2 显示了应用程序队列管理器和网关队列管理器 MARS 上所需的队列管理器别名。它显示了哪个应用程序指向哪个队列,以及应用程序放入的消息的最终目的地:

应用程序名称队列管理器名称应用程序队列定义MARS 上的队列管理器别名定义
APP1MERCURYDefine QR(APP1.QR1) RNAME(APPA.QL1) rqmname (CLUSS00) cluster(PLANETS) REPLACEDEFINE QR(CLUSS00) RQMNAME(JUPITER) RNAME(' ') XMITQ(JUPITER)
APP2VENUSDefine QR(APP2.QR1) RNAME(APPB.QL1) rqmname (CLUSS00) cluster(PLANETS) REPLACEDEFINE QR(CLUSS00) RQMNAME(SATURN) RNAME(' ') XMITQ(SATURN)
APP3EARTHDefine QR(APP3.QR1) RNAME(APPC.QL1) rqmname (CLUSS00) cluster(PLANETS) REPLACEDEFINE QR(CLUSS00) RQMNAME(URANUS) RNAME(' ') XMITQ(URANUS)

设置基础架构

  1. 使用下面的 7 条命令创建 7 个队列管理器。另外创建必要的监听器:
    CRTMQM MERCURY
    CRTMQM VENUS
    CRTMQM EARTH
    CRTMQM MARS
    CRTMQM JUPITER
    CRTMQM SATURN
    CRTMQM URANUS
  2. 添加 MERCURY 和 VENUS 作为集群 PLANETS 的完整存储库,定义必要的集群发送者渠道和集群接收者渠道:
    DEFINE CHANNEL (TO.MERCURY) CHLTYPE (CLUSSDR) CONNAME ('10.7.0.100(1414)')   
         CLUSTER (PLANETS) REPLACE
    DEFINE CHANNEL (TO.MERCURY) CHLTYPE (CLUSRCVR) CONNAME ('10.7.0.100(1414)') 
         CLUSTER (PLANETS) REPLACE
    DEFINE CHANNEL (TO.VENUS) CHLTYPE (CLUSRCVR) CONNAME ('10.7.0.100(1415)') 
         CLUSTER (PLANETS) REPLACE
    DEFINE CHANNEL (TO.VENUS) CHLTYPE (CLUSSDR) CONNAME ('10.7.0.100(1415)')   
         CLUSTER (PLANETS) REPLACE
  3. 通过设置部分存储库,将队列管理器 EARTH 和 MARS 设置为队列管理器集群 PLANETS 的一部分:
    DEFINE CHANNEL (TO.EARTH) CHLTYPE (CLUSSDR) CONNAME ('10.7.0.100(1414)')   
         CLUSTER (PLANETS) REPLACE
    DEFINE CHANNEL (TO.EARTH) CHLTYPE (CLUSRCVR) CONNAME ('10.7.0.100(1416)') 
         CLUSTER (PLANETS) REPLACE
    DEFINE CHANNEL (TO.MARS) CHLTYPE (CLUSRCVR) CONNAME ('10.7.0.100(1417)') 
         CLUSTER (PLANETS) REPLACE
    DEFINE CHANNEL (TO.VENUS) CHLTYPE (CLUSSDR) CONNAME ('10.7.0.100(1415)')   
         CLUSTER (PLANETS) REPLACE
  4. 依据上表中定义的 rqmname,在 MERCURY、VENUS 和 EARTH 上定义远程队列。
  5. 依据上表 3 中的定义,在 JUPITER、SATURN 和 URANUS 上定义本地队列。
  6. 在集群网关队列管理器上定义一个队列管理器:
    DEFINE QR(CLUSS00) RQMNAME(JUPITER) RNAME(' ') XMITQ(JUPITER)
    DEFINE QR(CLUSS00) RQMNAME(SATURN) RNAME(' ') XMITQ(SATURN)
    DEFINE QR(CLUSS00) RQMNAME(URANUS) RNAME(' ') XMITQ(URANUS)

结束语

本文介绍了如何使用队列管理器别名实现负载平衡,实现与一个集群内外的队列管理器通信。在此配置中,消息是以 “round-robin” 方式分发的。

致谢

感谢 James A. Grant Jr.(IBM WebSphere MQ 顾问 IT 架构师)在撰写本文期间提供的宝贵建议。

参考资料

学习

  • WebSphere MQ 资源
  • WebSphere 资源
    • developerWorks WebSphere 开发人员资源
      面向使用 WebSphere 产品的开发人员的技术信息和资源。developerWorks WebSphere 提供产品下载、how-to 信息、支持资源以及一个免费技术库,该技术库包含 2000 多篇技术文章、教程、最佳实践和 IBM 红皮书和在线产品手册。无论您是初学者、专家还是介于二者之间的用户,您都会找到使用基于开放标准的 WebSphere 软件平台构建企业级解决方案的需求。
    • developerWorks WebSphere 应用程序集成开发人员资源
      帮助您构建 WebSphere 应用程序集成和业务集成解决方案的技巧文章、下载、教程、培训、产品信息和其他资源。
    • 最受欢迎的 Sphere 试用版下载
      免费下载关键 WebSphere 产品试用版。
    • WebSphere 论坛
      这是一个特定于产品的论坛,您可以在此处获得技术问题的答案,并与其他 WebSphere 用户分享您的专业经验。
    • WebSphere 点播演示
      下载和观看这些自动运行的演示,了解 WebSphere 产品和技术如何帮助您的公司应对快速变化且愈加复杂的业务环境。
    • developerWorks 上的 WebSphere 相关文章
      IBM 内外的顶级从业者和顾问编写的 3000 多篇有关 WebSphere 和相关技术的已编辑和分配的文章。搜索您需要的内容。
    • developerWorks WebSphere 每周时事通讯
      developerWorks 新闻简讯提供了您感兴趣的主题的最新文章和信息。除 WebSphere 之外,还可以选择 Java、Linux、Open source、Rational、SOA、Web 服务和其他主题。立即订阅并设计您的定制邮件。
    • 来自 IBM Press 的 WebSphere 相关图书
      通过 Barnes & Noble 实现便捷的在线订购。
    • WebSphere 相关活动
      世界各地针对 WebSphere 开发人员的会议、商贸展览、网络广播和其他活动。
  • developerWorks 资源

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=860785
ArticleTitle=使用 WebSphere MQ 实现队列管理器别名和集群
publish-date=03072013