zoukankan      html  css  js  c++  java
  • MQ队列管理器搭建(二)

    MQ级联方式使用场景

    使用场景:
        如上图所示,Application1与Application2要进行通信或者消息互换,使用MQ中间件作为中介。上图中,Application1与Application2通信不进行直接连接,而是通过与MQ通信从而实现二者的通信。图中两个MQ的信息如上描述。其中RemoteQueue为远程队列,该队列指定了目标端对应的队列为Queue,并且该远程队列指定了传输所使用的传输队列尾TransQueue;而此传输队列TransQueue与发送通道CHAN_QMGR1_TO_QMGR2相关联,并且可以在该传输队列上设置触发器。Application1连接通过CHAN_SERVER_CON服务器连接通道连接MQ,将消息放入RemoteQueue远程队列,MQ的远程队列收到放入的消息后将消息放入与之关联的传输队列,传输队列中有消息后么,触发器会产生触发消息,通过发送通道将该条消息发送到目标端。此处需要注意的是,在发送通道中会指定目标端的ip和端口号,并且发送通道的名称需要与目标端接收通道的名称一致,即一个发送通道要对应目标端的一个接收通道,并且名称相同。如此消息便发到了MQ2的接收通道中,MQ2拿到消息后,该消息描述了它的目标点是Queue队列,则MQ2会将消息放入MQ2的Queue本地队列中去。
     
    MQ级联方式的搭建,左边的MQ队列管理器名称叫做MQ1,右边的叫做MQ2:
    MQ1的搭建:
    1.创建队列管理器MQ1。(使用mqm用户连接MQ所在的机器,dspmq查看队列的状态,查看MQ1是否已经创建,如果已经创建则更换名称,或者删掉重建)
    mqm@localhos ~>$crtmqm MQ1
    2.启动队列管理器
    mqm@localhos ~>$strmqmMQ1
    3.进入MQ1的命令行模式
    mqm@localhos ~>$runmqsc MQ1
    4.定义本地队列Queue,下面的含义不再赘述参见本章的上一节。
    DEFINE QLOCAL ('Queue')  DEFPSIST (YES) MAXDEPTH(100) REPLACE
    5.定义一个远程队列RemoteQueue
    DEFINE QREMOTE('RemoteQueue') RNAME('Queue') RQMNAME('MQ2') XMITQ('TransQueue')
    RNAME('Queue') 指定了对应的目标端的队列是Queue,RQMNAME('MQ2')指定了目标端的队列管理器名称为MQ2, XMITQ('TransQueue')指定了该远程队列关联的传输队列为‘TransQueue’。
    6.定义一个传输队列TransQueue
    DEFINE QLOCAL('TransQueue') usage(XMITQ) DEFPSIST(YES) INITQ(SYSTEM.CHANNEL.INITQ) TRIGDATA('CHAN_QMGR1_TO_QMGR2') TRIGTYPE(FIRST) TRIGGER REPLACE
    与本地队列不同的是 usage(XMITQ) ,它指定了该队列为传输队列。DEFPSIST(YES)代表队列持久化, INITQ(SYSTEM.CHANNEL.INITQ) TRIGDATA('CHAN_QMGR1_TO_QMGR2') TRIGTYPE(FIRST) TRIGGER 与设置触发器相关,初始化队列为SYSTEM.CHANNEL.INITQ,被触发的通道为'CHAN_QMGR1_TO_QMGR2',触发方式为First,每个消息到达时产生触发事件。
    7.定义一个发送通道CHAN_QMGR1_TO_QMGR2
    DEFINE CHANNEL('CHAN_QMGR1_TO_QMGR2') CHLTYPE(SDR) CONNAME('192.168.xx.xx(1414)') XMITQ('TransQueue')
    CONNAME指定了目标端ip和端口号,CHLTYPE(SDR)指定了通道的类型为发送,XMITQ指定了传输队列的名称。
    8.定义一个接收通道CHAN_QMGR2_TO_QMGR1,该名称与发送端的发送通道名称一致。
    DEFINE CHANNEL(CHAN_QMGR2_TO_QMGR1) CHLTYPE(RCVR)
    9.定义一个服务器连接通道
    DEFINE CHANNEL(CHAN_SERVER_CON) CHLTYPE(SVRCONN) REPLACE
    10.在定义一个死性队列QDEAD
    DEFINE QLOCAL ('QDEAD')  DEFPSIST (YES) MAXDEPTH(100) REPLACE
    11.给MQ1设置指定的死性队列,当消息无法到达指定的Queue中时,会被放入死性队列QDEAD
    ALTER QMGR DEADQ(‘QDEAD’)
    12.定义监听器LISTENER.TCP,该端口1414应用程序连接时需要指定。
    DEFINE LISTENER('LISTENER.TCP') TRPTYPE(TCP) CONTROL(QMGR) PORT(4141) REPLACE
    13.启动监听器LISTENER.TCP
    START LISTENER('LISTENER.TCP')
    如此发送的一方就搭建完了。
     
    MQ2的搭建:
    1.创建队列管理器MQ2。(使用mqm用户连接MQ所在的机器,dspmq查看队列的状态,查看MQ2是否已经创建,如果已经创建则更换名称,或者删掉重建)
    mqm@localhos ~>$crtmqm MQ2
    2.启动队列管理器
    mqm@localhos ~>$strmqm MQ2
    3.进入MQ2的命令行模式
    mqm@localhos ~>$runmqsc MQ2
    4.定义本地队列Queue,下面的含义不再赘述参见本章的上一节。
    DEFINE QLOCAL ('Queue')  DEFPSIST (YES) MAXDEPTH(100) REPLACE
    5.定义一个远程队列RemoteQueue
    DEFINE QREMOTE('RemoteQueue') RNAME('Queue') RQMNAME('MQ1') XMITQ('TransQueue')
    RNAME('Queue') 指定了对应的目标端的队列是Queue,RQMNAME('MQ1')指定了目标端的队列管理器名称为MQ1, XMITQ('TransQueue')指定了该远程队列关联的传输队列为‘TransQueue’。
    6.定义一个传输队列TransQueue
    DEFINE QLOCAL('TransQueue') usage(XMITQ) DEFPSIST(YES) INITQ(SYSTEM.CHANNEL.INITQ) TRIGDATA('CHAN_QMGR2_TO_QMGR1') TRIGTYPE(FIRST) TRIGGER REPLACE
    与本地队列不同的是 usage(XMITQ) ,它指定了该队列为传输队列。DEFPSIST(YES)代表队列持久化, INITQ(SYSTEM.CHANNEL.INITQ) TRIGDATA('CHAN_QMGR2_TO_QMGR1') TRIGTYPE(FIRST) TRIGGER 与设置触发器相关,初始化队列为SYSTEM.CHANNEL.INITQ,被触发的通道为'CHAN_QMGR2_TO_QMGR1',触发方式为First,每个消息到达时产生触发事件。
    7.定义一个发送通道CHAN_QMGR2_TO_QMGR1
    DEFINE CHANNEL('CHAN_QMGR2_TO_QMGR1') CHLTYPE(SDR) CONNAME('192.168.xx.xx(4141)') XMITQ('TransQueue')
    CONNAME指定了目标端ip和端口号,CHLTYPE(SDR)指定了通道的类型为发送,XMITQ指定了传输队列的名称。
    8.定义一个接收通道CHAN_QMGR1_TO_QMGR2,该名称与发送端的发送通道名称一致。
    DEFINE CHANNEL(CHAN_QMGR1_TO_QMGR2) CHLTYPE(RCVR)
    9.定义一个服务器连接通道
    DEFINE CHANNEL(CHAN_SERVER_CON) CHLTYPE(SVRCONN) REPLACE
    10.在定义一个死性队列QDEAD
    DEFINE QLOCAL ('QDEAD')  DEFPSIST (YES) MAXDEPTH(100) REPLACE
    11.给MQ1设置指定的死性队列,当消息无法到达指定的Queue中时,会被放入死性队列QDEAD
    ALTER QMGR DEADQ(‘QDEAD’)
    12.定义监听器LISTENER.TCP,该端口1414应用程序连接时需要指定。
    DEFINE LISTENER('LISTENER.TCP') TRPTYPE(TCP) CONTROL(QMGR) PORT(1414) REPLACE
    13.启动监听器LISTENER.TCP
    START LISTENER('LISTENER.TCP')
    这样就完成了MQ1与MQ2的互相通信了,需要注意的是,此处两个队列管理器的监听端口不能一样。
    小结:此种连接方式适用于小批量消息的发送及接收,即单个队列管理器便能满足需求。此外这种方式是将队列管理器与远程队列进行了绑定,不便于扩展。
  • 相关阅读:
    打印九九乘法表
    PAT (Basic Level) Practice (中文) 1091 N-自守数 (15分)
    PAT (Basic Level) Practice (中文)1090 危险品装箱 (25分) (单身狗进阶版 使用map+ vector+数组标记)
    PAT (Basic Level) Practice (中文) 1088 三人行 (20分)
    PAT (Basic Level) Practice (中文) 1087 有多少不同的值 (20分)
    PAT (Basic Level) Practice (中文)1086 就不告诉你 (15分)
    PAT (Basic Level) Practice (中文) 1085 PAT单位排行 (25分) (map搜索+set排序+并列进行排行)
    PAT (Basic Level) Practice (中文) 1083 是否存在相等的差 (20分)
    PAT (Basic Level) Practice (中文) 1082 射击比赛 (20分)
    PAT (Basic Level) Practice (中文) 1081 检查密码 (15分)
  • 原文地址:https://www.cnblogs.com/eer123/p/6891741.html
Copyright © 2011-2022 走看看