MQ詳細命令介紹

studywell發表於2017-05-09
WebSphere MQ常用命令及配置
http://bijian1013.iteye.com/blog/2308149

一. 佇列管理器
1.建立佇列管理器
命令:crtmqm <qmgrName>
示例: crtmqm -ld /var/mqm/log -md /var/mqm/data -lc -lf 16384 -lp 25 -ls 5 -q QMCIS
引數說明:
        -ld 日誌檔案目錄
        -md 資料檔案目錄
        -lc 使用迴圈日誌
        -lf 日誌檔案頁大小        
         -lp 主日誌檔案個數
        -ls 輔助日誌檔案個數
        -q是指建立預設的佇列管理器
        QMCIS:佇列管理器名

如:
Cmd程式碼
    crtmqm -q QmgrName   
    crtmqm -ld /data/mqm/QmgrName/log -md /data/mqm/QmgrName/data -lc -lf 10240 -lp 50 -ls 30 -q QmgrName  


2. 啟動佇列管理器
命令:strmqm <qmgrName>
示例:strmqm QmgrName
如果是啟動預設的佇列管理器,可以不帶其名字

3.進入佇列管理器,執行MQ命令
示例:runmqsc QmgrName
如果是預設佇列管理器,可以不帶其名字

4.顯示佇列管理器的執行狀態
命令:dspmq
命令結果顯示示例:
Text程式碼  收藏程式碼
    QMNAME(Test)                                              STATUS(正在執行)   
    QMNAME(Test2)                                             STATUS(已正常結束)   

顯示指定佇列管理器的執行狀態
Cmd程式碼  收藏程式碼
    dspmq –m QmgrName  

顯示佇列管理器的所有屬性

a.先進入佇列管理器
Cmd程式碼  收藏程式碼
    runmqsc QmgrName  

b.執行如下命令,顯示佇列管理器的所有屬性,其中,display可簡寫為dis。
Cmd程式碼  收藏程式碼
    display qmgr  


5.停止佇列管理器
命令:endmqm -c|-w|-i|-p <qmgrName>
引數說明:
        -c:受控關閉(或停頓關閉)。這是預設值。  
        佇列管理器停止,但僅當所有應用程式已斷開連線後才停止。當前正在處理的任何 MQI 呼叫已完成。
立即將控制權返回給您,並且不通知您佇列管理器是何時停止的。
對透過伺服器連線通道連線的任何客戶機應用程式的影響等效於以 QUIESCE 方式發出的 STOP CHANNEL 命令。

        -w:等待關閉。  
        此型別的關閉等效於受控關閉(除了僅當佇列管理器已停止後才將控制權返回給您之外)。當執行關閉時,您將接收到訊息:等待佇列管理器 qmName 結束。
對透過伺服器連線通道連線的任何客戶機應用程式的影響等效於以 QUIESCE 方式發出的 STOP CHANNEL 命令。

        -i:立即關閉。佇列管理器在完成所有當前正在處理的 MQI 呼叫後停止。任何在該命令發出後發出的 MQI 請求都將失敗。當佇列管理器再次啟動時,任何未完成的工作單元將回滾。  佇列管理器結束後返回控制權。
       對透過伺服器連線通道連線的任何客戶機應用程式的影響等效於以 FORCE 方式發出的 STOP CHANNEL 命令。

        -p:搶先關閉。  
        僅在意外情況下使用此型別的關閉。例如,當佇列管理器在常規 endmqm 命令下未停止。
        佇列管理器可以停止而不等待應用程式斷開連線或 MQI 呼叫完成。這可能會產生 WebSphere MQ 應用程式的不可預測的結果。關閉方式設定為立即關閉。如果佇列管理器稍後未停止,關閉方式將升級,且終止所有剩餘的的佇列管理器程式。
        對透過伺服器連線通道連線的任何客戶機應用程式的影響等效於以 TERMINATE 方式發出的 STOP CHANNEL 命令。
如:
Cmd程式碼  收藏程式碼
    endmqm QmgrName 受控停止   
    endmqm –i QmgrName 立即停止   
    endmqm –p QmgrName 強制停止  


6. 刪除佇列管理器
命令:dltmqm
如:
Cmd程式碼  收藏程式碼
    dltmqm QmgrName  

 
7.佇列管理器許可權,禁用認證
Cmd程式碼  收藏程式碼
    ALTER QMGR CHLAUTH (DISABLED)  


二. 管理本地MQ物件
        使用MQSC命令執行定義或修改佇列、通道等操作。MQSC命令可以有以下兩種使用方式:
        a.互動地使用 MQSC 命令:runmqsc [qmgrName]
        b.從文字檔案執行 MQSC 命令:runmqsc [qmgrName] < myprog.in  > myprog.out  

        命名WebSphere MQ 物件的規則:
        WebSphere MQ認證資訊、通道、客戶機通道、偵聽器、名稱列表、程式、佇列、服務和儲存類物件存在於各自獨立的物件名稱空間中,因此,每個不同型別的物件都可以有相同的名稱。但是,同一個名稱空間中的物件不能與任何其它的物件同名。(例如,本地佇列不能和模型佇列有相同的名稱。)WebSphere MQ 中的名稱都區分大小寫;但是,您應該記住不包含在引號中的小寫字元將轉換為大寫。

        示例:
Cmd程式碼  收藏程式碼
    alter qmgr CCSID(819)  #修改字符集   
    def ql(DEADQ) defpsist(yes) maxdepth(20000) replace   
    alter qmgr deadq(DEADQ) #設定死信佇列為DEADQ    

1. 佇列
1). 定義本地佇列示例
def ql(LOCALQ) maxdepth(10000) defpsist(yes) replace
引數說明:
        ql(LOCALQ): 佇列本地名稱
        maxdepth:佇列上允許的最大訊息數;
        defpsist:佇列中訊息永續性預設值。
                NO該佇列上的訊息在佇列管理器重新啟動時丟失
                YES該佇列上的訊息在佇列管理器重新啟動時儲存了下來。

        maxmsgl:僅對本地佇列和模型佇列有效,表示佇列中可以容納的最大訊息長度,這個屬性的調整範圍在各個平臺上的上限是不一樣的。通道在建立的時候會有一個握手過程,雙方會交換各自通道定義上的maxmsgl,最後協商出通道使用的最大訊息長度,一般會取雙方定義中較小的那一個。

        佇列管理器maxmsgl,預設值:4M,可以調整範圍:32K - 100M;通道maxmsgl,預設值:4M,可以調整範圍:0-佇列管理器maxmsgl;佇列maxmsgl,預設值:4M,可以調整範圍:0-佇列管理器maxmsgl;使用alter命令,即可對其maxmsgl進行修改。三者之間的關係:佇列管理器maxmsgl>=佇列maxmsgl。

DEFPRTY:放入佇列中的訊息的預設優先順序。 該值必須大於等於零(最低的優先順序)並小於等於 MAXPRTY 佇列管理器屬性。可以使用 DISPLAY QMGR 命令來顯示 MAXPRTY,(MAXPRTY 為 9。)

        關於訊息在佇列中的儲存時間:訊息在佇列的儲存時間與三個設定有關:佇列defpsist屬性、訊息Persistence永續性屬性和訊息Expiry訊息到期時間屬性,其中佇列defpsist屬性是在建立佇列時設定,訊息Persistence和Expiry屬性是應用程式往佇列放入訊息時指定。訊息本身的Persistence值優先於佇列defpsist值。Expiry指訊息到期時間,即經過指定的時間後,訊息如果還沒被取走,此訊息將過期(無效)。訊息過期後,可能會自動從佇列中刪除(取決於不同作業系統的MQ實現)。對於非永續性訊息,即使Expiry設為永不過期,重啟佇列管理器時,訊息也將丟失。

        定義持久信佇列:DEFINE QLOCAL(QNAME) DEFPSIST(YES) REPLACE
        設定佇列管理器的持久信佇列:ALTER QMGR DEADQ(QNAME)
        定義本地佇列:DEFINE QL(QNAME) REPLACE
        定義別名佇列:DEFINE QALIAS(QALIASNAME) TARGQ(QNAME)

如:Cmd程式碼  收藏程式碼
    def ql(LOCALQ) maxdepth(100000) defpsist(yes) maxmsgl(10485760) DEFPRTY(9) replace  


2). 定義遠端佇列示例
def qr(REMOTEQ) rname(LOCALQ) rqmname(QmgrName) xmitq(TRANS) defpsist(yes) replace
引數說明:
        qr(REMOTEQ):佇列本地名稱,名字可任意取;
        rname(LOCALQ):遠端佇列名,必須與遠端佇列管理器中的本地佇列名相同;
        rqmname(QmgrName):遠端佇列管理器名,必須與遠端佇列管理器名相同;
        xmitq(TRANS):本地傳輸佇列名稱。

如:Cmd程式碼  收藏程式碼
    DEFINE QREMOTE (REMOTEQ) RNAME (LOCALQ) RQMNAME (QmgrName) XMITQ(TRANS)  
     def qr(REMOTEQ) rname(LOCALQ) rqmname(QmgrName) xmitq(TRANS) defpsist(yes) replace  


3). 定義傳輸佇列

def ql(TRANS) usage(XMITQ) defpsist(YES) maxdepth(50000) trigger trigtype(FIRST) trigdata(01.SENDER) initq(SYSTEM.CHANNEL.INITQ) replace

引數說明:
        ql (TRANS):佇列本地名稱,名字可任意取;
        usage(XMITQ):指定此本地佇列為傳輸佇列,引數值固定填“XMITQ”;
        defpsist:佇列中訊息永續性預設值。
                NO該佇列上的訊息在佇列管理器重新啟動時丟失
                YES該佇列上的訊息在佇列管理器重新啟動時儲存了下來。

        maxdepth:佇列上允許的最大訊息數;
        trigger:啟動觸發(相應的,NOTRIGGER為禁用觸發)
        trigtype(FIRST) :觸發方式,建議值為“FIRST”,即第一條訊息觸發;
                FIRST:當第一條訊息(優先順序等於或大於由佇列的 TRIGMPRI 屬性指定的值)到達佇列。
                EVERY:每當一條訊息(優先順序等於或大於由佇列的 TRIGMPRI 屬性指定的值)到達佇列。
                DEPTH:當訊息(優先順序等於或大於由佇列的TRIGMPRI屬性指定的值)的數目等於 TRIGDPTH屬性指定的數目。
                NONE:沒有寫觸發訊息。

        trigdata(01.SENDER):觸發資料,值為傳輸佇列將使用的傳送通道名;
        initq(SYSTEM.CHANNEL.INITQ):觸發佇列,固定填“SYSTEM.CHANNEL.INITQ”。 觸發器在此的作用是當傳輸佇列接收到第一條訊息時,將觸發啟動指定的傳送通道。
        PROCESS(string):MQSeries 程式的本地名。這是程式例項的名稱,標識了觸發事件發生時,佇列管理器啟動的應用程式。在定義本地佇列時,不必定義程式,但是對於觸發事件的發生,它必須是可用的。如果佇列是傳輸佇列,則程式給出要啟動的通道的名稱。對於 AIX、HP-UX 、OS/2 Warp、OS/400、Sun Solaris 和 Windows NT 上的傳輸佇列,此引數是可選的;如果沒有指定此引數,則從為TRIGDATA引數指定的值中獲取引數名。

如:
Cmd程式碼  收藏程式碼

    DEFINE QLOCAL(QTNAME) USAGE(XMITQ) DEFPSIST(YES) INITQ(SYSTEM.CHANNEL.INITQ)+   
    PROCESS(PROCESSNAME) REPLACE  
     
    def ql(TRANS) usage(xmitq) defpsist(yes) maxdepth(100000) maxmsgl(10485760) DEFPRTY(9) +  
                   trigger trigtype(every) trigdata(01.SENDER) initq(system.channel.initq) replace  

 

4).定義模型佇列
DEFINE QMODEL(QNAME) DEFTYPE(TEMPDYN)
        模型佇列不是真的佇列,而是一個屬性集,在用 MQOPEN API 呼叫來建立動態佇列時可以使用模型佇列。
        在定義之後,模型佇列就與任何其它佇列一樣具有一個可用屬性的完全集,儘管某些屬性是預設的。

 

5). 檢視佇列
dis ql(qname) all/DISPLAY QUEUE (QNAME) ALL:顯示佇列所有屬性

檢視管理器中的佇列
dis ql(*)
dis ql(loc*)

如:
Cmd程式碼  收藏程式碼
    DISPLAY QUEUE(REMOTEQ) ALL  

dis ql(qname) curdepth 顯示佇列當前深度,即當前佇列中存放的訊息數
DISPLAY QUEUE(QNAME)MAXDEPTH CURDEPTH顯示佇列最大深度

如:
Cmd程式碼  收藏程式碼
    display queue(LOCALQ) MAXDEPTH CURDEPTH  
dis qs(qname) type(queue) all顯示與佇列相關的狀態資訊
dis qs(qname) type(handle) all顯示與訪問佇列的控制程式碼相關的狀態資訊

6).修改佇列屬性
顯示佇列的所選屬性
Cmd程式碼  收藏程式碼
    DISPLAY QUEUE (QNAME) DESCR GET PUT   

更改屬性
Cmd程式碼  收藏程式碼
    ALTER QMGR DESCR (‘NEW DESCRIPTION’)  
    ALTER QLOCAL (QNAME) PUT (DISABLED)  
    ALTER QALIAS (QNAME) TARGQ (TARGQNAME)  
 

7).死信佇列
定義死信佇列:
Cmd程式碼  收藏程式碼
    def ql(DEADQ) defpsist(yes) maxdepth(200000) maxmsgl(10485760) replace  

設定佇列管理器的死信佇列:
Cmd程式碼  收藏程式碼
    alter qmgr deadq(deadq) maxmsgl(10485760) ccsid(819)  

當然,在實際應用中,也可以定義錯誤訊息佇列,如下所示:
Cmd程式碼  收藏程式碼
    def ql(ERRMSG) defpsist(yes) maxdepth(200000) maxmsgl(10485760) replace  

8).操作佇列
a.往佇列中放訊息
Cmd程式碼  收藏程式碼
    amqsput QName QmgrName   
        如果佇列是預設佇列管理器中的佇列,可以不帶其佇列管理器的名字

如:
Cmd程式碼  收藏程式碼
    amqsput LOCALQ QmgrName  

b.從佇列中取出訊息
Cmd程式碼  收藏程式碼

    amqsget QName QmgrName   

        如果佇列是預設佇列管理器中的佇列,可以不帶其佇列管理器的名字

如:
Cmd程式碼  收藏程式碼

    amqsget LOCALQ QmgrName  

c.清除佇列中的所有訊息
先進入佇列管理器,再CLEAR QLOCAL (QNAME)

如:
Cmd程式碼  收藏程式碼

    runmqsc QmgrName  
    Clear QLOCAL(LOCALQ)  
        注:清除佇列中的訊息時出錯時處理,嘗試執行命令RESOLVE CHANNEL(channel_name) ACTION( COMMIT )後,再執行clear ql命令。
 

9). 刪除佇列
DELETE QLOCAL (QNAME):刪除本地或傳輸佇列
DELETE QREMOTE (QRNAME):刪除遠端佇列
如:
Cmd程式碼  收藏程式碼
    delete ql(LOCALQ)  
    delete qlocal(TRANS)  
    delete qremote(REMOTEQ)  


2.建立程式定義
建立程式定義
Cmd程式碼  收藏程式碼
    DEFINE PROCESS (PRONAME) +   
    DESCR ('STRING') +   
    APPLTYPE (WINDOWSNT) +   
    APPLICID ('runmqchl -c SDR_TEST -m QM_ TEST')  

        其中APPLTYPE的值可以是:CICS、UNIX、WINDOWS、WINDOWSNT等
顯示程式定義
Cmd程式碼  收藏程式碼
    DISPLAY PROCESS (PRONAME)  

 
3. 通道

1). 定義接收通道
def chl(02.SENDER) chltype(rcvr) trptype(tcp) replace
引數描述:
        chl(02.SENDER):接收通道名稱,必須與遠端佇列管理器中的傳送對列名稱相同。推薦的命名規則為 “遠端佇列管理器名.本地佇列管理器名”;
        chltype(rcvr):指定通道為型別,值固定為“rcvr”;
        trptype(tcp):通訊協議,除非特別指明,一般採用“tcp”協議。

如:
Cmd程式碼  收藏程式碼

    DEFINE CHANNEL (SDR_ TEST) CHLTYPE (RCVR) REPLACE  
    def chl(02.SENDER) chltype (RCVR) trptype (TCP) replace  

 

2). 定義傳送通道
def chl(01.SENDER) chltype(SDR) discint(0) conname('10.2.106.106(1417)') xmitq(TRANS) trptype(tcp) shortrty(10000) shorttmr(30) longtmr(300) longrty(999999999) batchsz(10) maxmsgl(10485760) replace

        chltype(SDR):指定通道為型別,值固定為“SDR”。其中CHLTYPE可以是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。

        DISCINT(Disconnect Interval,斷開間隔):當傳輸佇列中沒有訊息要傳送時, 傳送方通道(SDR)、伺服器通道(SVR)將在等待了該引數指定的時間間隔後斷開連線,停止通道。該引數以秒為單位,定義新的通道時,如果沒有特別指定,該引數會繼承系統物件的屬性,設為6000秒,約兩個小時。亦通道連續兩個小時沒有訊息傳送後就會停止。DISCINT引數設定為0,通道永遠不會停止。
        conname('10.2.106.106(1417)'):連線名包括對方的IP和埠。
        xmitq(TRANS):本地傳輸佇列名稱。
        shortrty:短重試次數。
        shorttmr:短重試間隔。
        longtmr:長重試次數。
        longrty:長重試間隔。
        batchsz:批處理大小。

如:
Cmd程式碼  收藏程式碼
    DEFINE CHANNEL (SDRNAME) CHLTYPE (SDR) +   
    CONNAME (‘100.100.100.215(1418)’) XMITQ (QTNAME) REPLACE   
      
    def chl(01.SENDER) chltype(sdr) discint(0) conname('10.2.106.106(1415)') xmitq(TRANS) trptype(tcp) +  
    shortrty(10000) shorttmr(30) longtmr(300) longrty(999999999) batchsz(10) maxmsgl(10485760) replace  


3). 定義伺服器連線通道
def chl() chltype() replace
def chl(DC.SVRCONN) chltype(SVRCONN) TRPTYPE(tcp) mcauser('mqm') DESCR('Server-connection CHANNEL') replace

        chl(DC.SVRCONN):連線接收通道名稱,JAVA客戶端如連線透過此通道名稱連線。
        chltype(SVRCONN):指定通道為型別,值固定為“SVRCONN”。其中CHLTYPE可以是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。
        mcauser('mqm'):設定MCAUSER為mqm。
        DESCR('Server-connection CHANNEL'):通道描述。

如:
Cmd程式碼  收藏程式碼

    def chl(DC.SVRCONN) chltype(svrconn) TRPTYPE(tcp) mcauser('mqm') +  
    DESCR('Server-connection CHANNEL') replace  
 

4).檢視通道定義
DISPLAY CHANNEL(WZ.SENDER)


5). 啟動通道
start chl(01.SENDER) 或start channel(01.SENDER)

6).檢視通道狀態
dis chs(channel name)
        通道的當前狀態,它可以是正在啟動、正在繫結、正在初始化、正在執行、正在停止、正在重試、已暫停、已停止、正在請求和通道狀態未找到。
        正常執行時,通道狀態為“正在執行”;
        關閉通道時,通道狀態為“已停止”;
        如果通道狀態長時間處於“正在繫結”(binding)、“正在重試”(retrying),則表明通道不正常,需要人工介入。這時可檢視佇列管理器日誌檔案,日誌檔案中一般會提供異常原因。
        關於“通道狀態未找到”:此狀態值僅表示當前沒有建立到此通道的連線,並不能表示通道是否正常。
 
7). 關閉通道
stop chl(channel name)

8). 重置通道
reset chl(channel name)

9). 刪除通道
delete chl(channel name)


三. 監聽器
定義監聽器
def listener(QMC01) TRPTYPE(TCP) PORT(1417) CONTROL(STARTONLY) BACKLOG(0) replace

引數描述:
        listener(QMC01):監聽器名,名稱可任意取;
        TRPTYPE(TCP):通訊協議型別;
        PORT(1417):服務監聽埠
        CONTROL(string)指定如何啟動和停止偵聽器:  
        MANUAL 不會自動啟動或自動停止偵聽器。透過使用 START LISTENER 命令和 STOP
        LISTENER 命令來控制它。這是預設值。  
        QMGR 當佇列管理器啟動和停止時,同時啟動和停止被定義的偵聽器。  
        STARTONLY 當佇列管理器啟動時,同時啟動偵聽器,但當佇列管理器停止時,不請求停止偵聽器。  

如:
Cmd程式碼  收藏程式碼
    def listener(QMC01) TRPTYPE(TCP) PORT(1414) CONTROL(QMGR)  

1). 啟動監聽器
start listener(QMC01)

2). 關閉監聽器  
stop listener(QMC01)  

3). 檢視監聽器狀態  
dis lsstatus(LISTENER.TCP) all
如:
Cmd程式碼  收藏程式碼
    dis lsstatus(QMC01) all  
 

附一些高階配置的命令:
amqmcert                  配置SSL證照
amqmdain                配置windows上的MQ服務
crtmqcvx                    轉換資料
dmpmqaut                轉儲物件許可權管理
dmpmqlog                轉儲日誌管理
dspmq                         顯示佇列管理器
dspmqaut                  顯示開啟物件的許可權
dmpmqcap               顯示處理程式容量和處理程式數
dspmqcsv                 顯示命令伺服器狀態
dspmqfls                   顯示檔名
dspmqtrc                   跟蹤MQ輸出(HP-UNIX LINUX Solaris)
dspmqrtn                   顯示事務的詳細資訊
endmqcsv                 停止佇列管理器上的命令伺服器
strmqcsv                    啟動佇列管理器上的命令伺服器
endmqtrc                   停止跟蹤
rcdmqimg                  向日志寫物件的映像
rcmqobj                      根據日誌中的映像重新建立一個物件
rsvmqtrn                     提交或逆序恢復事務



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

相關文章