WebSphere MQ基礎命令

來源:互聯網
上載者:User

標籤:des   style   http   color   io   os   使用   ar   for   

基礎概念
對於MQ,我們需要知道4個名詞:隊列管理器、隊列、訊息、通道;對於編程設計人員,通常更關心訊息和隊列,對於維護管理員,通常 會更關心隊列管理器和通道。如果我們把隊列管理器比作是資料庫,那麼隊列就是其中的一張表,訊息就是表中的一條記錄。
隊列:我們可以簡單地把隊列看成一個容器,用於存放訊息。

隊列管理器:隊列管理器構建了獨立的 MQ 的運行環境,它是訊息佇列的管理者,用來維護和管理訊息佇列。

訊息:MQ中的最小對象;預設情況下,訊息預設可以達到 4MB。訊息可以分成持久訊息和非持久訊息。所謂“持久”的 意思,就是在MQ 隊列管理器重啟動後,訊息是否仍然能保持。持久的訊息寫入或讀出隊列的同時會在 Log 中記錄,所以效能上比非持久訊息差不少。

通道:通道則是兩個隊列管理器之間的一種單向的點對點的通訊串連, 訊息在通道中只能單向流動。隊列管理器之間的通訊是通過配置通道來實現 的,通道兩側的隊列管理器對這個通道的相關參數應該能對應起來。在通道上可以配置不同的通訊協定,這樣就使得編程介面與通訊協定無關。通道兩端的 配置必須匹配,且名字相同,否則無法連通。

RUNMQSC:命令列互動介面管理工具;作為維護人員的我們,與MQ打交道有兩種方式,一種是通過MQ提供的二進位命令工具(在mq安裝目錄的bin目錄下),另一種方式則是通過命令列互動管理工具;這二者在功能上有很多是重合的,但並非完全可替代;RUNMQSC是一個通用的 MQ 對象管理工具,使用 MQSC命令集可以對 MQ 對象進行全方位的管理,也是各種管理方式最直接、最全面的一種。RUNMQSC 啟動並執行命令集稱為 MQSC (MQ Script Command)";在 RUNMQSC 中大小寫無關,所有的命令會先轉換成全大寫再提交執行。所以如果要 表示大小相關的字串,比如對象名,則用引號將字串包住。輸入以下命令啟動MQSC命令:runmqsc [queueManagerName]


 

--查看MQ版本--

dspmqver

--查看隊列狀態--
dspmq

--建立隊列管理器--
crtmqm -q ECIS_QM

--刪除隊列管理器--
dltmqm ECIS_QM

--啟動隊列管理器--
strmqm ECIS_QM

--關閉隊列管理器--
endmqm -i ECIS_QM 立即停止
endmqm -p ECIS_QM 強制停止

--運行隊列管理器--
runmqsc ECIS_QM

--定義監聽器--
DEFINE LISTENER(LSR_4_ECIS_QM) TRPTYPE(TCP) PORT(1616) CONTROL(QMGR) REPLACE
START LISTENER(LSR_4_ECIS_QM)

--定義通道--
DEFINE CHANNEL(ECIS.SVRCONN) CHLTYPE(SVRCONN) MCAUSER(‘mqm‘) REPLACE

--啟動通道--
runmqchl –c ChlName –m ECIS_QM

--啟動偵聽--
runmqlsr –t TCP –p 1616 –m ECIS_QM
endmqlsr -m ECIS_QM

--定義隊列--
DEFINE QL(Q_SVC2ADP_4_TELNET) REPLACE
DEFINE QL(Q_SVC2ADP_4_JDBC) REPLACE
DEFINE QL(Q_SVC2ADP_4_HTTP) REPLACE
DEFINE QL(Q_SVC2ADP_4_SOCKET) REPLACE

--刪除隊列--
delete QL(Q_SVC2ADP_4_TELNET)

--查看監聽器--
display listener (LSR_4_ECIS_QM)

--查看通道--
dis chs(*)

--查看通道--
display ql(*) [all]

--查看隊列深度--
display ql(Q_SVC2ADP_4_HTTP) curdepth

--清除隊列訊息--
clear ql(Q_SVC2ADP_4_HTTP)

--查看CCSID--
display qmgr all

--修改CCSID--
ALTER QMGR [FORCE] CCSID(5488)

 

邏輯定義
##################################################
./JMSAdmin

DELETE QCF(T_ECIS_QCF)

DELETE Q(T_ECIS_Q_SVC2ADP_TELNET) 
DELETE Q(T_ECIS_Q_ADP2SVC_TELNET)
DELETE Q(T_ECIS_Q_SVC2ADP_JDBC)
DELETE Q(T_ECIS_Q_ADP2SVC_JDBC)

DELETE Q(T_ECIS_Q_SVC2ADP_HTTP)
DELETE Q(T_ECIS_Q_ADP2SVC_HTTP)
DELETE Q(T_ECIS_Q_SVC2ADP_SOCKET)
DELETE Q(T_ECIS_Q_ADP2SVC_SOCKET)

DEFINE QCF(T_ECIS_QCF) DESC() TRAN(CLIENT) HOST(10.151.128.13) QMGR(T_ECIS_QM) CHAN(T_ECIS.SVRCONN) PORT(2626) CCSID(5488)

DEFINE Q(T_ECIS_Q_SVC2ADP_TELNET) DESC() QMGR(T_ECIS_QM) QUEUE(Q_SVC2ADP_4_TELNET) CCSID(5488)
DEFINE Q(T_ECIS_Q_ADP2SVC_TELNET) DESC() QMGR(T_ECIS_QM) QUEUE(Q_ADP2SVC_4_TELNET) CCSID(5488)
DEFINE Q(T_ECIS_Q_SVC2ADP_JDBC) DESC() QMGR(T_ECIS_QM) QUEUE(Q_SVC2ADP_4_JDBC) CCSID(5488)
DEFINE Q(T_ECIS_Q_ADP2SVC_JDBC) DESC() QMGR(T_ECIS_QM) QUEUE(Q_ADP2SVC_4_JDBC) CCSID(5488)

DEFINE Q(T_ECIS_Q_SVC2ADP_HTTP) DESC() QMGR(T_ECIS_QM) QUEUE(Q_SVC2ADP_4_HTTP) CCSID(5488)
DEFINE Q(T_ECIS_Q_ADP2SVC_HTTP) DESC() QMGR(T_ECIS_QM) QUEUE(Q_ADP2SVC_4_HTTP) CCSID(5488)
DEFINE Q(T_ECIS_Q_SVC2ADP_SOCKET) DESC() QMGR(T_ECIS_QM) QUEUE(Q_SVC2ADP_4_SOCKET) CCSID(5488)
DEFINE Q(T_ECIS_Q_ADP2SVC_SOCKET) DESC() QMGR(T_ECIS_QM) QUEUE(Q_ADP2SVC_4_SOCKET) CCSID(5488)

 

 

 

 


WebSphere MQ常用命令及配置
################################################## 
//建立本地隊列Q
DEFINE   QLOCAL (Q)
//將本地隊列Q 的最大深度設定為5
ALTER QLOCAL (Q) MAXDEPTH(5)
//重新建立本地隊列Q 如果Q已經存在,則將其全部屬性重設為預設屬性
DEFINE QLOCAL (Q) REPLACE
//建立遠程隊列
DEFINE QREMOTE(QRNAME) RNAME(AAA) RQMNAME(QMGRNAME) XMITQ(QTNAME)
//建立傳輸隊列
define qlocal(CLV_HQ_TRAN) usage(xmitq) INITQ(SYSTEM.CHANNEL.INITQ) TRIGDATA(REV_CLV) TRIGTYPE(EVERY) TRIGGER REPLACE
//建立接收端通道C
DEFINE CHANNEL(C) CHLTYPE(RCVR)
//建立發送方通道C ,串連對方的IP為10.10.10.10  連接埠為1414 通道串連的傳輸隊列為XQ
DEFINE CHANNEL(C) CHLTYPE(SDR) CONNAME(’10.10.10.10 (1414)’) XMITQ(XQ)
//建立請求方通道
DEFINE CHANNEL(D) CHLTYPE(RQSTR) CONNAME(’10.10.10.10 (1414)’)
//建立伺服器通道
DEFINE CHANNEL (D) CHLTYPE(SVR) xmitq (XQ1)
//建立伺服器串連通道
DEFINE CHANNEL(E) CHLTYPE(SVRCONN)  REPLACE

//顯示所有遠程隊列
display qremote (*)
//顯示所有通道
Display channel (*)

//定義無效信件佇列
DEFINE QLOCAL(QUEUE) DEFPSIST(YES) REPLACE

//設定隊列管理器的無效信件佇列
ALTER QMGR DEADQ(QUEUE)

設定MaxChannels和MaxActiveChannels屬性(最大串連數)
##################################################
MaxChannels和MaxActiveChannels分別代表隊列管理器允許配置的通道的最大個數和允許同時啟動並執行通道的個數,MaxChannels的預設值是100,MaxActiveChannels的預設值與MaxChannels相同。如果您的並發通道串連個數超過了100,您需要修改這兩個參數。這對於大並發的Client/Server間通訊尤為重要。
在unix平台,修改qm.ini檔案,添加如下所示(路徑:/var/mqm/qmgrs/HQ_SVR): 
Channels:
MaxChannels = 3000   (最大通道數)
MaxActiveChannels = 3000   (最大活動通道數)
PipeLineLength=2
AdoptNewMCA=ALL
然後重啟MQ

 

 

 

 


//定義持久性隊列:
DEFINE QLOCAL(QNAME) DEFPSIST (YES) REPLACE

傳輸隊列管理
##################################################
1:定義傳輸隊列
DEFINE QLOCAL(Q_TRANSFER) USAGE(XMITQ)
註:
Q_TRANSFER:傳輸隊列名

下面定義一個輸入隊列並帶觸發器
DEFINE QLOCAL(Q_TRANSFER) USAGE(XMITQ) DEFPSIST(YES)  INITQ(SYSTEM.CHANNEL.INITQ) TRIGDATA(DP_RCHANNEL) REPLACE
註:
參數1:傳輸隊列名稱(Q_TRANSFER)
參數5:觸發器資料(DP_RCHANNEL),也就是觸發後要啟動的通道。

2:在傳輸入隊列上定義觸發器
DPCIS_Q_TRANSFER:傳輸隊列
觸發器資料:DP_RCHANNEL,即:發送通道,觸發時啟動該通道
alter qlocal(DPCIS_Q_TRANSFER) TRIGDATA(‘DP_RCHANNEL‘) TRIGTYPE(every) TRIGGER initq(‘SYSTEM.CHANNEL.INITQ‘)

遠程隊列管理
##################################################
通過輸入以下命令來定義遠程隊列定義:
define qremote(Q1) rname(Q1) rqmname(QM_APPLE) xmitq(QM_APPLE)
註:
參數1:隊列名稱(發送方遠程隊列名)
參數2:遠程隊列(接收方的本地接收隊列名)
參數3:遠程隊列管理器(接收方隊列管理器名)
參數4:傳輸隊列(發送方傳輸隊列名)

通道管理
##################################################
1:建立接收方通道
DEFINE CHANNEL(SDR_ TEST)  CHLTYPE(RCVR)  REPLACE 
define channel(Q_R_CHANNEL2) chltype(RCVR) replace
註:
參數1:接收方通道名稱
replace:表示有該通道了替換

2:建立發送方通道 
DEFINE CHANNEL(SDRNAME)  CHLTYPE(SDR)  CONNAME (‘100.100.100.215(1418)’)  XMITQ(QTNAME)  REPLACE
其中CHLTYPE可以是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。

define channel(DP_RCHANNEL) chltype(SDR) conname(‘10.101.2.3 (1414)‘) xmitq(Q_TRANSFER) replace
註:
通道名稱:DP_RCHANNEL (發送方通道的名稱) 
傳輸隊列:Q_TRANSFER  (發送方傳輸隊列的名稱)

3:啟動通道
start channel(QM_ORANGE.QM_APPLE)

4:查看通道狀態
dis chs(*)

接聽程式管理
##################################################
1:定義接聽程式
DEFINE LISTENER(TCPLS1) TRPTYPE(TCP) PORT(1414)  REPLACE

2:啟動接聽程式
start listener(TCPLS1)
3:顯示接聽程式資訊
display listener(tcpls1)

建立觸發
##################################################
一般設定MQ觸發器的目的有兩種, 一是自動啟動發送端通道, 二是監視隊列訊息, 一旦發現新的訊息, 則利用觸發器啟動相應的處理進程
如果是利用觸發器自動啟動發送端通道, 使用方法1, 如果是利用觸發器啟動使用者進程, 使用方法2

方法1
A 在傳輸通道上設定觸發器, 開啟觸發器控制, 類型為"第一個"
B 初始隊列為SYSTEM.CHANNEL.INITQ, 該隊列為MQ專用的通道啟動隊列, 不需要手工啟動其觸發監視器
C 觸發器資料為發送端通道名稱, 例如 QAG.50
D 在發送端通道不活動的情況下, 在傳輸通道放入訊息測試

方法2
A 建立一個觸發啟動隊列, 其模板為SYSTEM.DEFAULT.INITIATION.QUEUE
runmqsc
define qlocal (MQ.TRIGER.INIQUEUE) like (SYSTEM.DEFAULT.INITIATION.QUEUE)
B 定義進程 所謂進程就是觸發器要觸發的程式本例中進程名稱:TRIGER.PROGRAM 應用程式識別碼為:"Notepad.exe"
C 在隊列上設定觸發器, 一般為本地隊列, 開啟觸發器控制, 類型根據自己的需要選擇"第一個", "每個" 還是 "根據訊息數量"
D 初始隊列選擇A中建立的觸發啟動隊列, 例如MQ.TRIGER.INIQUEUE, 進程名稱設定為B中定義的進程名稱, 例如TRIGER.PROGRAM
E 啟動觸發監視器 runmqtrm -m QAGWY -q MQ.TRIGER.INIQUEUE
F 在本地隊列放入訊息進行測試

方法2也可以完成方法1的工作, 只需要將進程定義中的應用程式識別碼改為 runmqchl -m QAGWY -c QAG.50 就可以了, 但MQ中提供了專用的通道啟動隊列,
而該隊列不需要手工啟動觸發監視器, 因此方法1比方法2的步驟要少, 配置也簡單, 所以在利用觸發器自動啟動發送端通道的情況下, 還是方法1更好.

WebSphere MQ基礎命令

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.