MQSerIEs。本文就針對MQ的基本操作與配置進行詳細的闡述,希望對讀者有所幫助。
一.MQ基本操作
MQ中有幾個很重要的組件:隊列管理器(QueueManager)、隊列(Queue)和通道(Channel)。其基本的操作方法如下:
創建隊列管理器
crtmqm ?q QMgrName
-q是指創建缺省的隊列管理器
刪除隊列管理器
dltmqm QmgrName
啟動隊列管理器
strmqm QmgrName
如果是啟動默認的隊列管理器,可以不帶其名字
停止隊列管理器
endmqm QmgrName 受控停止
endmqm ?i QmgrName 立即停止
endmqm ?p QmgrName 強制停止
顯示隊列管理器
dspmq ?m QmgrName
運行MQSerIEs命令
runmqsc QmgrName
如果是默認隊列管理器,可以不帶其名字
往隊列中放消息
amqsput QName QmgrName
如果隊列是默認隊列管理器中的隊列,可以不帶其隊列管理器的名字
從隊列中取出消息
amqsget QName QmgrName
如果隊列是默認隊列管理器中的隊列,可以不帶其隊列管理器的名字
啟動通道
runmqchl ?c ChlName ?m QmgrName
啟動偵聽
runmqlsr ?t TYPE ?p PORT ?m QMgrName
停止偵聽
endmqlsr -m QmgrName
MQSerIEs命令
定義死信隊列
DEFINE QLOCAL(QNAME) DEFPSIST(YES) REPLACE
設定隊列管理器的死信隊列
ALTER QMGR DEADQ(QNAME)
定義本地隊列
DEFINE QL(QNAME) REPLACE
定義別名隊列
DEFINE QALIAS(QALIASNAME) TARGQ(QNAME)
遠程隊列定義
DEFINE QREMOTE(QRNAME) +
RNAME(AAA) RQMNAME(QMGRNAME) +
XMITQ(QTNAME)
定義模型隊列
DEFINE QMODEL(QNAME) DEFTYPE(TEMPDYN)
定義本地傳輸隊列
DEFINE QLOCAL(QTNAME) USAGE(XMITQ) DEFPSIST(YES) +
INITQ(SYSTEM.CHANNEL.INITQ)+
PROCESS(PROCESSNAME) REPLACE
創建進程定義
DEFINE PROCESS(PRONAME) +
DESCR(‘STRING’)+
APPLTYPE(WindowsNT)+
APPLICID(’ runmqchl -c SDR_TEST -m QM_ TEST’)
其中APPLTYPE的值可以是:CICS、UNIX、WINDOWS、WindowsNT等
創建發送方通道
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(SDR_ TEST) CHLTYPE(RCVR) REPLACE
創建服務器連接通道
DEFINE CHANNEL(SVRCONNNAME) CHLTYPE(SVRCONN) REPLACE
顯示隊列的所有屬性
DISPLAY QUEUE(QNAME) [ALL]
顯示隊列的所選屬性
DISPLAY QUEUE(QNAME) DESCR GET PUT
DISPLAY QUEUE(QNAME)MAXDEPTH CURDEPTH
顯示隊列管理器的所有屬性
DISPLAY QMGR [ALL]
顯示進程定義
DISPLAY PROCESS(PRONAME)
更改屬性
ALTER QMGR DESCR(‘NEW DESCRIPTION’)
ALTER QLOCAL(QNAME) PUT(DISABLED)
ALTER QALIAS(QNAME) TARGQ(TARGQNAME)
刪除隊列
DELETE QLOCAL(QNAME)
DELETE QREMOTE(QRNAME)
清除隊列中的所有消息
CLEAR QLOCAL(QNAME)
二.配置一個能夠通信的遠程連接
以上講述了MQ的基本命令操作,但只知道這些是沒有實際意義的。MQ的最終目的是實現遠程通信,所以下面就以一個具體的例子來說明如何實現遠程連接。這個例子的目的是建立可以實現消息傳遞的一對MQ服務器,它們分別基於NT和UNIX平台。
首先在NT端建一隊列管理器
crtmqm ?q QM_NT
啟動隊列管理器
strmqm QM_NT
運行MQ控制台命令
runmqsc QM_NT
創建死信隊列
DEFINE QL(NT.DEADQ) DEFPSIST(YES) REPLACE
更改隊列管理器屬性,設置其死信隊列
ALTER QMGR DEADQ(NT.DEADQ)
創建進程定義
DEFINE PROCESS(P_NT)+
APPLTYPE(WindowsNT)+
APPLICID(’ runmqchl -c SDR_NT -m QM_NT’)
創建本地傳輸隊列
DEFINE QL(QT_NT) USAGE(XMITQ) DEFPSIST(YES) +
INITQ(SYSTEM.CHANNEL.INITQ)+
PROCESS(P_NT) REPLACE
創建遠程隊列定義,對應於UNIX機器上的本地隊列Q_UNIX,傳輸隊列為QT_NT
DEFINE QREMOTE(QR_NT)+
RNAME(Q_UNIX) RQMNAME(QM_UNIX)+
XMITQ(QT_NT)
創建發送方通道,其傳輸隊列為QT_NT,遠程主機地址為10.10.10.2,偵聽端口為1414
DEFINE CHANNEL(SDR_NT) CHLTYPE(SDR)+
CONNAME(‘10.10.10.2(1414)’) XMITQ(QT_NT) REPLACE
創建服務器連接通道
DEFINE CHANNEL(S_NT) CHLTYPE(SVRCONN) REPLACE
在UNIX端創建隊列管理器
crtmqm ?q QM_UNIX
啟動隊列管理器
strmqm QM_UNIX
添加偵聽程序
修改/etc/services文件,加入一行:
MQSeries 1414/tcp #MQSerIEs channel listener
修改/etc/inetd.conf文件,加入一行(啟動偵聽程序)
MQSerIEs stream tcp nowait mqm /usr/lpp/mqm/bin/amqcrsta amqcrsta ?m QM_UNIX
運行以下命令,以使修改起作用
refresh ?s inetd
運行MQ控制台命令
runmqsc QM_UNIX
創建死信隊列
DEFINE QL(UNIX.DEADQ) DEFPSIST(YES) REPLACE
更改隊列管理器屬性,設置其死信隊列
ALTER QMGR DEADQ(UNIX.DEADQ)
創建接收方通道,其名字必須與遠程發送方相同
DEFINE CHANNEL(SDR_NT) CHLTYPE(RCVR) REPLACE
創建本地隊列
DEFINE QL(Q_UNIX) DEFPSIST(YES) REPLACE
創建服務器連接通道
DEFINE CHANNEL(S_UNIX) CHLTYPE(SVRCONN) REPLACE
經過以上操作之後,遠程連接的配置工作完成。接下來需要驗證配置是否正確。
在NT端啟動發送方通道
runmqchl ?c SDR_NT ?m QM_NT 或 start chl(SDR_NT)
從NT端發送消息到UNIX端
amqsput QR_NT QM_NT
在UNIX端接收消息
/usr/mqm/samp/bin/amqsget Q_UNIX QM_UNIX
若能收到消息,說明配置成功。
另,在NT下一般情況下在建立隊列管理器時會自動建立偵聽器,啟動隊列管理器時則會自動啟動偵聽程序。當然也可以手動配置偵聽程序。
修改\winnt\system32\drivers\etc\services文件,在文件中加入一行:
MQSeries 1414/tcp #MQSerIEs channel listener
啟動偵聽程序
runmqlsr ?t tcp ?p 1414 ?m QM_NT
以上說明了怎樣建立簡單的單向傳輸網絡。消息從NT端傳送到UNIX端。建立從UNIX端到NT端的遠程連接和以上相仿,要建立雙向的傳輸網絡也是同樣的道理。
三.配置JNDI
用JMS實現消息的發送和接收時,經常會用到JNDI。因為JNDI這種方式比較靈活,對於編程也比較簡單。
在安裝了MQSeries ClIEnt for Java之後,在\Java\bin目錄下找到JMSAdmin.config文件。該文件主要用來說明Context的存儲方式及存儲地址,對應於文件中的兩個參數INITIAL_CONTEXT_FACTORY和PROVIDER_URL。典型的JMSAdmin.config文件內容如下:
#INITIAL_CONTEXT_FACTORY=com.sun.jndi.ldap.LdapCtxFactory
INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory
#INITIAL_CONTEXT_FACTORY=com.ibm.eJS.ns.jndi.CNInitialContextFactory
#
#PROVIDER_URL=ldap://polaris/o=ibm,c=us
PROVIDER_URL=file:/d:/temp
#PROVIDER_URL=iiop://localhost/
#
SECURITY_AUTHENTICATION=none
INITIAL_CONTEXT_FACTORY表示JMSAdmin Tool使用的服務提供商。當前有三種受支持的值。com.sun.jndi.ldap.LdapCtxFactory用於LDAP,如果使用它就必須安裝一個LDAP服務器。com.sun.jndi.fscontext.RefFSContextFactory用於文件系統上下文,它只需要使用者提供存放上下文的文件路徑。com.ibm.eJS.ns.jndi.CNInitialContextFactory是專門為websphere提供的,它需要和websphere的CosNaming資源庫一起使用。
PROVIDER_URL表示會話初始上下文的URL,由JMSAdmin tool實現的所有JNDI操作的根。它和INITIAL_CONTEXT_FACTORY一一對應。
ldap://hostname/contextname 用於LDAP
file:[drive:]/path