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的互相通信了,需要注意的是,此处两个队列管理器的监听端口不能一样。
    小结:此种连接方式适用于小批量消息的发送及接收,即单个队列管理器便能满足需求。此外这种方式是将队列管理器与远程队列进行了绑定,不便于扩展。
  • 相关阅读:
    [SCOI2012]滑雪与时间胶囊
    [SCOI2012]喵星球上的点名
    SDOI2012 Round1 day2 拯救小云公主(dis)解题报告
    SDOI2012 Round1 day2 象棋(chess)解题报告
    SDOI2012 Round1 day2 集合(set)解题报告
    [Sdoi2014]数数[数位dp+AC自动机]
    [NOI2013]快餐店
    java 日期的格式化 输入/输出
    elastic search 查询语句
    elasticsearch数据迁移——elasticsearch-dump使用
  • 原文地址:https://www.cnblogs.com/eer123/p/6891741.html
Copyright © 2011-2022 走看看