程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 介紹關於IBM MQSeries的使用指南

介紹關於IBM MQSeries的使用指南

編輯:關於JAVA
 隨著計算機網絡和分布式應用的不斷發展,遠程消息傳遞越來越成為應用系統中不可缺少的組成部分。商業消息中間件的出現保證了消息傳輸的可靠性,高效率和安全性,同時也減少了系統的開發周期。目前應用最多的消息中間件產品為IBM

 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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved