添加远程队列定义以隔离从网关队列管理器发送的消息

修改使用网关队列管理器的重叠集群的配置。 修改消息从网关队列管理器传输到应用程序后,不使用与其他集群消息相同的传输队列或通道。 该解决方案使用集群队列远程定义以及单独的发送方通道和传输队列。

开始之前

按照该任务中的步骤,构建使用IBM® MQ集群将客户端-服务器应用程序部署到集线器架构中使用网关队列管理器创建两个重叠群集所示的重叠聚类。

关于本任务

该解决方案使用分布式排队将 Server App 应用程序的消息与网关队列管理器上的其他消息流量分开。 必须在 QM1 上定义集群远程队列定义,以将消息转移到不同的传输队列和不同的通道。 远程队列定义必须包含对仅针对 QM3上的 Q1 存储消息的特定传输队列的引用。 在 图 1中,集群队列别名 Q1A 由远程队列定义 Q1R进行补充,并添加了传输队列和发送方通道。

在此解决方案中,将使用公共 SYSTEM.CLUSTER.TRANSMIT.QUEUE返回任何应答消息。

此解决方案的优点是易于在同一集群中的同一队列管理器上分隔多个目标队列的流量。 该解决方案的缺点是无法在不同队列管理器上的 Q1 的多个副本之间使用集群工作负载均衡。 要克服此缺点,请参阅 添加集群传输队列以隔离从网关队列管理器发送的集群消息流量。 您还必须管理从一个传输队列到另一个传输队列的交换机。

图 1。 使用远程队列定义部署到中心和辐射集群体系结构的客户机/服务器应用程序
该图显示由网关队列管理器连接的两重叠集群。 消息通过传输队列 QM3.Q1,在网关队列管理器中。 消息由网关队列管理器中的远程队列定义进行路由。 该定义将在所有集群中进行集群。 它以 CLUSTER2中的队列为目标。 网关队列管理器中的队列管理器别名指向每个集群中的实际队列管理器。

过程

  1. 创建通道以将 Q1 的消息流量与网关队列管理器分开
    1. 在网关队列管理器 QM1上创建到目标队列管理器 QM3的发送方通道。
      DEFINE CHANNEL(QM1.QM3.Q1) CHLTYPE(SDR) CONNAME(QM3HostName(1413)) XMITQ(QM3.Q1) REPLACE
      
    2. 在目标队列管理器 QM3上创建接收方通道。
      DEFINE CHANNEL(QM1.QM3.Q1) CHLTYPE(RCVR) REPLACE
      
  2. 在网关队列管理器上为到 Q1 的消息流量创建传输队列
    DEFINE QLOCAL(QM3.Q1) USAGE(XMITQ) REPLACE
    START CHANNEL(QM1.QM3.Q1)
    

    启动与传输队列关联的通道,将传输队列与通道关联。 一旦传输队列与通道相关联,该通道将自动启动。

  3. 使用集群远程队列定义补充网关队列管理器上 Q1 的集群队列别名定义。
    DEFINE QREMOTE CLUSNL(ALL) RNAME(Q1) RQMNAME(QM3) XMITQ(QM3.Q1) REPLACE
    

后续操作

通过使用网关队列管理器 QM1上的集群队列远程定义 Q1RQM2QM3 上的 Q1 发送消息来测试配置。

  1. QM2 上运行样本程序 amqsput 以放置消息。

    C:\IBM\MQ>amqsput Q1R QM2
    Sample AMQSPUT0 start
    target queue is Q1R
    Sample request message from QM2 to Q1 using Q1R

    Sample AMQSPUT0 end

  2. 运行样本程序 amqsget 以从 QM3 上的 Q1 获取消息

    C:\IBM\MQ>amqsget Q1 QM3
    Sample AMQSGET0 start
    message <Sample request message from QM2 to Q1 using Q1R>
    no more messages
    Sample AMQSGET0 end