Websphere mq 的基本操作__Web
來源:互聯網
上載者:User
Websphere 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:]/pathname 用於檔案系統上下文
iiop://hostname[:port]/[?TargetContext=ctx] 用於訪問 websphere CosNaming 名稱空間
最後還有一個參數 SECURITY_AUTHENTICATION ,用於說明 JNDI 是否把安全性憑證傳遞給了您使用的服務供應商。只有當使用了 LDAP 服務供應商時,才使用此參數。此參數有三個值, none (匿名認證)、 simple (簡單認證)和 CRAM-MD5 認證機制。如果沒有提供有效值,預設值為 none 。
確認設定檔之後,可以在 /java/bin 目錄下啟動 JMSAdmin 控制台。也可以在任何目錄下用下面的命令來啟動控制台:
JMSAdmin –cfg MQ_JAVA_INSTALL_PATH/java/bin/JMSAdmin.config
其中 MQ_JAVA_INSTALL_PATH 為 MQSeries Client for Java 安裝的根目錄。
若啟動失敗,則好好檢查一下您的環境變數是否設定正確。根據我個人的經驗,除了把 com.ibm.mq.jar 和 com.ibm.mqjms.jar 加入到環境變數外,還要把 fscontext.jar 和 providerutil.jar 加入到環境變數。
進入 JMSAdmin 控制台後,您可以自由定義 sub context 。對於子內容相關的操作,主要有一下命令:
display ctx
define ctx(ctxname)
change ctx(ctxname)
change ctx(=up)
change ctx(=init)
delete ctx(ctxname)
當然,在這裡的主要任務並非是用來定義 sub context ,而是用來定義以下幾個對象:
MQQueueConnectionFactory
MQTopicConnectionFactory
MQQueue
MQTopic
(還有其它的一些對象,如 MQXAQueueConnectionFactory 等,不常用到,在此不作說明。)
可以使用很多動詞來操縱目錄名稱空間中的受管理對象。 ALTER 、 DEFINE 、 DISPLAY 、 DELETE 、 COPY 和 MOVE ,它們的用法都算比較簡單,這裡只列舉一二以作說明。
例一:定義一 QueueConnectionFactory ,串連主機 10.10.10.18 ,連接埠 1414
DEFINE QCF(EXAMPLEQCF)+
DESC(Example Queue Connection Factory)+
TRAN(CLIENT)+
HOST(10.10.10.18)+
QMGR(QM_EXAMPLE)+
CHAN(S_EXAMPLE)+
PORT(1414)+
CCSID(1381)
例二:定義一 Queue ,其對應於 MQ 中的 Q_EXAMPLE
DEFINE Q(EXAMPLEQL)+
DESC(Local queue)+
QMGR(QM_EXAMPLE)+
QUEUE(Q_EXAMPLE)+
CCSID(1381)
四.用 JMS 實現