MQ通道配置示例 4種

studywell發表於2017-05-09

MQ通道配置示例(1):Sender/Receiver
http://blog.csdn.net/qingsong3333/article/details/51463222

    Sender/Receiver 通道是最常見的通道配置方式,Sender 作為通道的傳送方也是通道連線的主動發起方,Receiver 作為通道的接收方也是通道連線的被動監聽方。在Receiver 端要配置並執行相應的監聽器。

    在以下的配置指令碼中,通道連線兩個佇列管理器QM1 和QM2。其中,QM1 為Sender,QM2 為Receiver。在QM1 上配置了遠端佇列QR 和傳輸佇列QX,其中QR 指向佇列管理器QM2 上的本地佇列QL,且QR 與QX 對應,即凡是要放入QR 佇列的訊息,在加上傳輸訊息頭後直接放入QX 中等待傳送。QM1 上配置Sender 通道需要指定對方的通訊引數 (IP地址和埠),而這些引數必須與QM2上的監聽器設定對應。Sender 通道與傳輸佇列QX 對應,表示凡是在QX等待傳送的訊息最終都可以由該通道送出。雙方通道必須同名。

架構如下圖所示:

        QM1(Sender)                                QM2(Receiver)
------------------          ------------------
        遠端佇列:QR  
                       ----通道C---     本地佇列QL
        傳輸佇列:QX
                                                             127.0.0.1(1416)
------------------          ------------------

STEP1: 建立Sender佇列管理器以及佇列
SESSION 1:
//建立並啟動佇列管理器MQ1
C:\windows\system32>CRTMQM QM1

C:\windows\system32>STRMQM QM1

//建立遠端佇列QR、傳輸佇列QX以及通道C  (引數什麼意思?如果改成目標機器情況如何)
C:\windows\system32>RUNMQSC QM1

DEFINE QREMOTE(QR) RNAME(QL) RQMNAME(QM2) XMITQ(QX) REPLACE
DEFINE QLOCAL(QX) USAGE(XMITQ) REPLACE
DEFINE CHANNEL(C) CHLTYPE(SDR) TRPTYPE(TCP) CONNAME('127.0.0.1(1416)') XMITQ(QX) REPLACE
END    
=================================

STEP2: 建立Receiver佇列管理器以及佇列,並啟動監聽
SESSION 2:
同樣,建立對應的佇列管理器QM2以及本地佇列QL和通道C
mqm@ora10g:~> crtmqm QM2
mqm@ora10g:~> strmqm QM2

C:\windows\system32>RUNMQSC QM2
DEFINE QLOCAL(QL) REPLACE
DEFINE CHANNEL(C) CHLTYPE(RCVR) TRPTYPE(TCP) REPLACE
END


//遠端的佇列管理器至少有一個 TCP/IP Listener,
C:\windows\system32>start runmqlsr -m QM2 -t tcp -p 1416

linux直接執行:mqm@ora10g:~> runmqlsr -m QM2 -t tcp -p 1416  
執行完命令沒有退出提示;

C:\windows\system32>netstat -an | find /i "1416"
  TCP    0.0.0.0:1416           0.0.0.0:0              LISTENING
  TCP    [::]:1416              [::]:0                 LISTENING
 
linux 如下顯示
ora10g:/opt/mqm # netstat -an|grep 1416
tcp        0      0 :::1416                 :::*                    LISTEN      
=============================================  

STEP3:啟動通道,開始傳送和接收訊息:
SESSION 1:  
C:\windows\system32>RUNMQSC QM1
start channel(C)
END

C:\windows\system32>amqsput QR QM1
linux 需要新增路徑,否則找不到該命令;mqm@ora10g:~> export PATH=$PATH:/opt/mqm/samp/bin
mqm@ora10g:~> amqsput QR QM1
Sample AMQSPUT0 start
target queue is QR
ARe you there?
Coool
byeBye


Sample AMQSPUT0 end


與此同時
SESSION 2:
C:\windows\system32>amqsget QL QM2
Sample AMQSGET0 start
message <ARe you there?>
message <Coool>
message <byeBye>
no more messages

Sample AMQSGET0 end

MQ通道配置示例(2):Server/Requester
http://blog.csdn.net/qingsong3333/article/details/51463612

疑問:該測試,建多個佇列進行測試,或者刪掉重來;

        Server/Requester 通道也是一種較常見的通道配置方式,從訊息流向來看,Server 作為訊息的傳送方,Requester 作為訊息的接收方。但是從連線方式來看,Requester 卻是連線的主動方,Server 是被動方(監聽)。這種模式常用於動態IP 地址的環境中,Server是靜態IP 地址的伺服器,Requester 的機器上網後自動分配到一個IP 地址,所以是動態的,由Requester 發起

連線後接收資料。在本例中,由QM2 (Requester) 啟動通道start channel (C)。
//備註:誰發起連線,誰來啟動channel,並且建立Channel的時候指定CONNAME,對方來啟動監聽。

QM1(Server)                      QM2(Requester)
-------------------            ---------------------------
遠端佇列:QR
            --------通道C--------- 本地佇列:QL
傳輸佇列:QX
 127.0.0.1(1415)
-------------------             ----------------------------

STEP1: 建立Sender佇列管理器以及佇列
SESSION 1:
//建立並啟動佇列管理器MQ1
C:\windows\system32>CRTMQM QM1
C:\windows\system32>STRMQM QM1

//建立遠端佇列QR、傳輸佇列QX以及通道C,並啟動監聽
C:\windows\system32>RUNMQSC QM1
DEFINE QREMOTE(QR) RNAME(QL) RQMNAME(QM2) XMITQ(QX) REPLACE
DEFINE QLOCAL(QX) USAGE(XMITQ) REPLACE
DEFINE CHANNEL(C) CHLTYPE(SVR) TRPTYPE(TCP) XMITQ(QX) REPLACE
END
=================================

//啟動監聽
C:\windows\system32>start runmqlsr -m QM1 -t tcp -p 1415

C:\windows\system32>netstat -an | find /i "1415"
  TCP    0.0.0.0:1415           0.0.0.0:0              LISTENING
  TCP    [::]:1415              [::]:0                 LISTENING

STEP2: 建立Receiver佇列管理器以及佇列
SESSION 2:
同樣,建立對應的佇列管理器QM2以及本地佇列QL和通道C
C:\windows\system32>CRTMQM QM2
C:\windows\system32>STRMQM QM2
C:\windows\system32>RUNMQSC QM2
DEFINE QLOCAL(QL) REPLACE
DEFINE CHANNEL(C) CHLTYPE(RQSTR) TRPTYPE(TCP) CONNAME('127.0.0.1(1415)') REPLACE
END
=============================================  

STEP3:啟動通道,開始傳送和接收訊息:
SESSION 2:  
C:\windows\system32>RUNMQSC QM2
start channel(C)
END

SESSION 1:
C:\windows\system32>amqsput QR QM1
Sample AMQSPUT0 start
target queue is QR
11111111
222222222222
Sample AMQSPUT0 end

與此同時
SESSION 2:
C:\windows\system32>amqsget QL QM2
Sample AMQSGET0 start
message <11111111>
message <222222222222>
no more messages
Sample AMQSGET0 end


MQ通道配置示例(3):Sender/Requester
http://blog.csdn.net/qingsong3333/article/details/51465100

        Sender/Requester 的連線過程稍微複雜一些,Requester 首先與Sender 連線,在通知對方連線引數後連線斷開。Sender 進行反向連線,訊息也是反向傳送的,即由Sender 傳給Requester。這種反向連線的方式,稱為回撥連線 (Callback Connection)。這種模式也常用於做雙向驗證,即雙方必須都要知道對方的通訊引數才能完成回撥連線。這種情況下,啟動通道的仍然是訊息的發起方,即Requester

架構圖如下:
QM1(Sender)                     QM2(Requester)
-----------------            --------------------------
遠端佇列:QR
              -----通道C------   本地佇列:QL
傳輸佇列:QX
  127.0.0.1(1415)                  127.0.0.1(1416)
------------------            --------------------------

STEP1: 建立Sender佇列管理器以及佇列
SESSION 1:
//建立並啟動佇列管理器MQ1
C:\windows\system32>CRTMQM QM1
C:\windows\system32>STRMQM QM1

//建立遠端佇列QR、傳輸佇列QX以及通道C,並啟動監聽
C:\windows\system32>RUNMQSC QM1

DEFINE QREMOTE(QR) RNAME(QL) RQMNAME(QM2) XMITQ(QX) REPLACE
DEFINE QLOCAL(QX) USAGE(XMITQ) REPLACE
DEFINE CHANNEL(C) CHLTYPE(SDR) TRPTYPE(TCP) CONNAME('127.0.0.1(1416)') XMITQ(QX) REPLACE
END
=================================

//啟動監聽
C:\windows\system32>start runmqlsr -m QM1 -t tcp -p 1415
C:\windows\system32>netstat -an | find /i "1415"
  TCP    0.0.0.0:1415           0.0.0.0:0              LISTENING
  TCP    [::]:1415              [::]:0                 LISTENING

STEP2: 建立Receiver佇列管理器以及佇列
SESSION 2:
同樣,建立對應的佇列管理器QM2以及本地佇列QL和通道C
C:\windows\system32>CRTMQM QM2
C:\windows\system32>STRMQM QM2
C:\windows\system32>RUNMQSC QM2
DEFINE QLOCAL(QL) REPLACE
DEFINE CHANNEL(C) CHLTYPE(RQSTR) TRPTYPE(TCP) CONNAME('127.0.0.1(1415)') REPLACE
END

//啟動監聽
C:\windows\system32>start runmqlsr -m QM2 -t tcp -p 1416
C:\windows\system32>netstat -an | find /i "1416"
  TCP    0.0.0.0:1416           0.0.0.0:0              LISTENING
  TCP    [::]:1416              [::]:0                 LISTENING

=============================================  

STEP3:啟動通道,開始傳送和接收訊息:
SESSION 2:  
C:\windows\system32>runmqchl -m QM2 -c C

5724-H72 (C) Copyright IBM Corp. 1994, 2009. ALL RIGHTS RESERVED.
2016/5/20 23:38:52 正在啟動通道“C'。
2016/5/20 23:38:53 通道“C”正常結束。


SESSION 1:

C:\Windows\system32>amqsput QR QM1
Sample AMQSPUT0 start
target queue is QR
DSLFAJKLFD
JJJJLLLLLL

Sample AMQSPUT0 end


與此同時
SESSION 2:
C:\windows\system32>amqsget QL QM2
Sample AMQSGET0 start
message <DSLFAJKLFD>
message <JJJJLLLLLL>
no more messages
Sample AMQSGET0 end



MQ通道配置示例(4):三級跳 (Multi-hopping)
http://blog.csdn.net/qingsong3333/article/details/51469755

        QM1 要傳送訊息去QM3,訊息在QM2 被自動轉發,而不被應用訊息處理,即通常所說的訊息在QM2 不落地。
        QM1 上的遠端佇列QR_QM3 定義了目標佇列管理器為QM3,目標佇列為QL_QM3。
訊息透過指定的傳輸佇列QM2 路由到QM2 上後,試圖尋找QM3,結果找到名為QM3的傳輸佇列,訊息進一步路由到佇列管理器QM3 上,最終放入正確的目標佇列。

架構示意圖:

QM1                      QM2                   QM3
---------------       ---------              ------------
QR_QM3   QM2    ---->    QM3          ---->    QL_QM3

Sender                 Receiver/Sender        Receiver
                        127.0.0.1(1415)     127.0.0.1(1416)                        
--------------         -----------          -----------------      


建立相關佇列管理器及佇列:
------------------------
session1:
CRTMQM QM1
STRMQM QM1
RUNMQSC QM1
DEFINE QREMOTE(QR_QM3) RNAME(QL_QM3) RQMNAME(QM3) XMITQ(QM2) REPLACE
DEFINE QLOCAL(QM2) USAGE (XMITQ) REPLACE
DEFINE CHANNEL (C.QM1.QM2) CHLTYPE(SDR) TRPTYPE(TCP) CONNAME('127.0.0.1(1415)') XMITQ(QM2) REPLACE
END

session2:
CRTMQM QM2
STRMQM QM2
RUNMQSC QM2
DEFINE QLOCAL(QM3) USAGE(XMITQ) REPLACE
DEFINE CHANNEL(C.QM1.QM2) CHLTYPE(RCVR) TRPTYPE(TCP) REPLACE
DEFINE CHANNEL(C.QM2.QM3) CHLTYPE(SDR) TRPTYPE(TCP) CONNAME('127.0.0.1(1416)') XMITQ(QM3) REPLACE
END

session3:
CRTMQM QM3
STRMQM QM3
RUNMQSC QM3
DEFINE QLOCAL(QL_QM3) REPLACE
DEFINE CHANNEL(C.QM2.QM3) CHLTYPE(RCVR) TRPTYPE(TCP) REPLACE
END

啟動監聽:
-------
session2:
  start runmqlsr -m QM2 -t tcp -p 1415

session3:
start runmqlsr -m QM3 -t tcp -p 1416

啟動通道:
-------
session1:
RUNMQSC QM1
start channel(C.QM1.QM2)
END

session2:
RUNMQSC QM2
start channel(C.QM2.QM3)
END

傳送訊息:
--------
session1:
 amqsput QR_QM3 QM1
 
session3:
 amqsget QL_QM3 QM3




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-2138765/,如需轉載,請註明出處,否則將追究法律責任。

相關文章