jms之MQ的互聯互連

來源:互聯網
上載者:User

1:建立隊列管理器:
以管理員身份登陸websphere mq伺服器,運行websphere MQ控制命令dspmq,顯示已有隊列管理器狀態:
dspmq
比如項目用到的隊列管理器是MQCOSMOS,如果沒有,建立一個:

crtmqm –q MQCOSMOS
如果MQCOSMOS的狀態為”Ended unexpected”,則需要啟動它:
strmqm MQCOSMOS
停止訊息管理器:
endmqm MQCOSMOS
啟用MQSC命令:
runmqsc MQCOSMOS

mqsc命令:
顯示該隊列管理器下所有隊列:
display qstatus(*)
查看queue中的訊息數:
dis ql('ICAREQL.ONL.PROD.REQUEST') curdepth
建立本地message queue:
define qlocal(ICAREQL.ONL.DEV.DISPATCH)

查看通道定義:
display channel(*) trptype, convert

查看通道狀態:
display chstatus(*) current

ping通道(只能在發送通道和伺服器通道使用)
ping channel(SYSTEM.DEF.SENDER).

清空queue中的message:
CLEAR QLOCAL('myqueue');
值得注意的是:當此message queue正在被第三方使用時, clear命令不會自行成功(比如was的某個MDB正在使用此message queue時)

推薦定義無效信件佇列:
查看mqm 中是否定義了無效信件佇列:
 display qmgr DEADQ
返回:
   QMNAME(mqm_was55_ntel)                  DEADQ( )
則: 定義一個隊列:
DEFINE QLOCAL('MYDEADQ') DEFPSIST(YES) MAXDEPTH(20000) MAXMSGL(4194304) REPLACE 
把此隊列設定為無效信件佇列:
ALTER QMGR DEADQ('MYDEADQ') TRIGINT(10000)
再次查看:
display qmgr DEADQ
返回:
   QMNAME(mqm_was55_ntel)                  DEADQ(MYDEADQ)

結束mqsc:
End

兩個隊列管理器實現雙向通訊需要的mqsc指令碼。

實現兩個mqm的互聯互連, 需要如下基礎設施:
在源隊列管理器上:
發送通道
遠程隊列定義
傳輸隊列
無效信件佇列

在目標隊列管理器上:
接收通道
目標隊列
無效信件佇列

由於需要互聯互連,是雙向通訊, 則每一個mqm既是源隊列, 也是目標隊列, 以上設施都需要.

在本地隊列管理器(QMA)中(eg: 本地ip: 192.168.10.222, remote ip: 192.168.10.154):

*echo "修改無效信件佇列為DEADQ"
ALTER QMGR DEADQ('DEADQ') TRIGINT(10000)

*echo "定義遠程隊列"
DEFINE QREMOTE('QRB') DEFPSIST(YES) XMITQ('QMB') RNAME('QLB') RQMNAME('QMB') REPLACE

*echo "定義無效信件佇列"
DEFINE QLOCAL('DEADQ') DEFPSIST(YES) MAXDEPTH(20000) MAXMSGL(4194304) REPLACE

*echo "定義本地接收隊列"
DEFINE QLOCAL('QLA') DEFPSIST(YES) MAXDEPTH(100000) MAXMSGL(1048576) TRIGGER TRIGTYPE(FIRST) PROCESS('CICS.PRO') INITQ('SYSTEM.CICS.INITIATION.QUEUE') REPLACE

*echo "定義傳輸隊列"
DEFINE QLOCAL('QMB') DEFPSIST(YES) MAXDEPTH(100000) MAXMSGL(1048576) USAGE(XMITQ) TRIGGER TRIGTYPE(FIRST) TRIGDATA('A.B') INITQ('SYSTEM.CHANNEL.INITQ') REPLACE

*echo "修改system.cics.initiation.queue隊列的屬性"
ALTER QLOCAL('SYSTEM.CICS.INITIATION.QUEUE') DESCR('WebSphere MQ Default CICS Initiation queue') DEFPSIST(YES) MAXDEPTH(100000) MAXMSGL(1000)

*echo "定義接收通道"
DEFINE CHANNEL('B.A') CHLTYPE(RCVR) TRPTYPE(TCP) BATCHSZ(50) HBINT(300) MRRTY(10) MRTMR(1000) REPLACE

*echo "定義發送通道"
DEFINE CHANNEL('A.B') CHLTYPE(SDR) TRPTYPE(TCP) BATCHSZ(50) CONNAME('192.168.10.154') DISCINT(1800) HBINT(300) LONGRTY(999999999) LONGTMR(300) SHORTRTY(10000) SHORTTMR(30) XMITQ('QMB') REPLACE
DEFINE CHANNEL('SYSTEM.ADMIN.SVRCONN') CHLTYPE(SVRCONN) TRPTYPE(TCP) HBINT(300) MAXMSGL(4194304) MCAUSER('mqm') REPLACE

*echo "定義接收進程"
DEFINE PROCESS('CICS.PRO') REPLACE APPLTYPE(CICS) APPLICID('TEST')

------------------------------------
在遠程隊列管理器(QMB)中:
*echo "修改無效信件佇列為DEADQ"
ALTER QMGR DEADQ('DEADQ') TRIGINT(10000)

*echo "定義遠程隊列"
DEFINE QREMOTE('QRA') DEFPSIST(YES) XMITQ('QMA') RNAME('QLA') RQMNAME('QMA') REPLACE

*echo "定義無效信件佇列"
DEFINE QLOCAL('DEADQ') DEFPSIST(YES) MAXDEPTH(20000) MAXMSGL(4194304) REPLACE

*echo "定義本地接收隊列"
DEFINE QLOCAL('QLB') DEFPSIST(YES) MAXDEPTH(100000) MAXMSGL(1048576) TRIGGER TRIGTYPE(FIRST) PROCESS('CICS.PRO') INITQ('SYSTEM.CICS.INITIATION.QUEUE') REPLACE

*echo "定義傳輸隊列"
DEFINE QLOCAL('QMA') DEFPSIST(YES) MAXDEPTH(100000) MAXMSGL(1048576) USAGE(XMITQ) TRIGGER TRIGTYPE(FIRST) TRIGDATA('B.A') INITQ('SYSTEM.CHANNEL.INITQ') REPLACE

*echo "修改system.cics.initiation.queue隊列的屬性"
ALTER QLOCAL('SYSTEM.CICS.INITIATION.QUEUE') DESCR('WebSphere MQ Default CICS Initiation queue') DEFPSIST(YES) MAXDEPTH(100000) MAXMSGL(1000)

*echo "定義接收通道"
DEFINE CHANNEL('A.B') CHLTYPE(RCVR) TRPTYPE(TCP) BATCHSZ(50) HBINT(300) MRRTY(10) MRTMR(1000) REPLACE

*echo "定義發送通道"
DEFINE CHANNEL('B.A') CHLTYPE(SDR) TRPTYPE(TCP) BATCHSZ(50) CONNAME('192.168.10.222') DISCINT(1800) HBINT(300) LONGRTY(999999999) LONGTMR(300) SHORTRTY(10000) SHORTTMR(30) XMITQ('QMA') REPLACE
DEFINE CHANNEL('SYSTEM.ADMIN.SVRCONN') CHLTYPE(SVRCONN) TRPTYPE(TCP) HBINT(300) MAXMSGL(4194304) MCAUSER('mqm') REPLACE

*echo "定義接收進程"
DEFINE PROCESS('CICS.PRO') REPLACE APPLTYPE(CICS) APPLICID('TEST')

 

實現兩個隊列管理器互聯互連的最後一步是在本地和遠程啟動相應的監聽程式,連接埠號碼為1414。
進入/etc/xinetd.conf(路徑不清楚, 可用find ./ -name amqcrsta 尋找),
編輯該檔案:
gedit /etc/xinetd.conf

在文中增加如下:
# D20080423
WebSphere MQ stream tcp nowait mqm /opt/mqm/maintenance/6.0.2.2/MQSeriesServer/backup/opt/mqm/bin/amqcrsta amqcrsta [-m Queue_Man_Name]
# D20080423 END

另外, 還要需要修改/etc/services檔案, 對MQ 開放1414連接埠(root或超級使用者才有許可權修改)
在該檔案中增加:
WebSphere MQ 1414/tcp   # used by was mq

為使修改生效, 需重啟xinet進程
尋找該進程
ps -elf |grep xinet

kill它:kill -9 788

運行WebSphere MQ提供的監聽程式:
runmqlsr -m QMB -t TCP

啟動xinetd(start | stop | status)
[root@P202 ~]# service xinetd start

測試queue通訊:
1.切換到MQ安裝目錄
2.進入samp/bin
3. 執行amqsput q_name mqm_name進入發送器
amqsput QRB QMA
4. 發訊息
5. 執行 amqsget q_name mqm_name進入接收器
amqsget QLB QMB

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.