打開MQ安裝程序,選擇下一步,默認安裝WebSphere MQ,
完成MQ的安裝工作,啟動WebSphere MQ,
服務器配置,選擇新建隊列管理器,創建名為 "mq"的隊列管理器,其他選項默認不變,點"下一步"
允許在 TCP/IP上進行隊列管理器的遠程管理,點擊"下一步",完成MQ隊列管理器的創建。
新建本地隊列,在mq下創建名為"MQ_send"的本地隊列(用戶可以根據自己的需求更改本地隊列的名字和數量),其他選項默認即可。
在 mq下創建名為"MQ_CHL"的服務器通道,其他選項默認即可。
在 MQ服務器端的計算機用戶中添加MQ客戶端所在計算機的系統用戶。例如:我的MQ客戶端所在的計算機用戶名為Administrator,則在服務器端系統中添加名為"Administrator"的用戶。具體步驟如下:
<1>點擊 "開始"->"控制面板"->"管理工具"->"計算機管理"->"本地用戶和組"->"用戶",選擇Administrator點右鍵,打開屬性面板,選擇“隸屬於”把mqmt添加進去。如下圖所示:
(如果客戶端計算機使用的其他的用戶名,在服務器端新建一個用戶名,同樣操作,把用戶名添加隸屬於mqm組里面)
-
客戶端連接MQ服務出現2035錯誤MQRC_NOT_AUTHORIZED
-
找到mq的安裝目錄下的bin目錄,在cmd環境下執行命令runmqsc 然后執行命令 alter qmgr chlauth(disabled) 把權限驗證下掉就可以了,如下圖所示:
-
MQ常用命令:
登錄MQI,一般是cd到MQ安裝目錄下bin,然后切換mqm賬戶,mqm賬戶是mq默認的管理員賬戶。可以使用命令dspmq 查看隊列管理器機器狀態,若服務未啟動,可使用strmqm命令啟動服務(注:隊列管理器名稱是分區大小寫的),然后執行runmqsc 隊列管理器,即可登錄到MQI。
查詢CCSID可以使用命令:display qmgr,查看ccsid屬性即可。
查詢Listener監聽端口,可使用DISPLAY LSSTATUS(*) ALL。查看port屬性即可。
--查看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)邏輯定義
##################################################
./JMSAdminDELETE 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) REPLACE2:啟動偵聽器
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更好.