MQ基础知识及操作指南_第1页
MQ基础知识及操作指南_第2页
MQ基础知识及操作指南_第3页
MQ基础知识及操作指南_第4页
MQ基础知识及操作指南_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、最新资料推荐MQ基础知识及操作指南一. MQ基本操作MQ中有几个很重要的组件:队列管理器(QueueManage)、队列(Queue和通道(Channel)。其基本的操作方法如下:创 建队列管理器crtmqm q QMgrName-q是指创建缺省的队列管理器删除队列管理器dltmqm QmgrName启 动队列管理器strmqmQmgrName如果是启动默认的队列管理器,可以不带其名字停止队列管理器endmqm QmgrName受控停止en dmqm i QmgrName立即停止en dmqm p QmgrName强制停止显示队列管理器dspmqmQmgrName运行MQSeries命令run

2、mqsc QmgrName如果是默认队列管理器,可以不带其名字往队列中放消息amqsput QNamQmgrName如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字从队列中取出消息amqsget QNamQmgrName如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字启动通道runmqchl c ChlName m QmgrName启动侦听runmqlsr t TYPE p PORT m QMgrName停止侦听en dmqlsr -m QmgrName MQSeries 命令定义死信队列 DEFINE QLOCAL( QNAM) DEFPSIST (YES REPLA

3、CE设定队列管理器的死信队列ALTER QMGR DEADQ (QNAME定义本地队列DEFINE QL(QNAM) REPLACE定义别名队列DEFINE QALIAS(QALIASNAMEJARGQ(QNAME)远程队列定义DEFINE QREMOTE (QRNAME +RNAME(AAA RQMNAMQMGRNAMIEXMITQ (QTNAME定义模型队列DEFINE QMODEL (QNAME DEFT YPE( TEMPDYN定义本地传输队列DEFINE QLOCAL(QTNAME) USAGE(XMITQ)DEFPSIST(YES) +INITQ ( SYSTEM.CHANNELN

4、ITQ +PROCESS(PROCESSNAIREPLACE仓U 建进程定义DEFINE PROCESS PRONAME +DESCR( STRING +APPLTYPEWINDOWSNTAPPLICID ( runmqchl -c SDR_TEST-m QM_ TEST其中APPLT YPE的值可以是:CICS、UNIX WINDOWSWINDOWSN等创建发送方通道DEFINE CHANNELSDRNAME CHLTYPE ( SDR + CONNAME(15(1418) ) XMITQ (QTNAME REPLACE其中CHLT YPE可以是:SDR SVR R

5、CVR RQSTR CLNTCONNSVRCONNCLUSSDR和 CLUSRCVR创建接收方通道DEFINE CHANNELSDRJESTCHLTYPE( RCVR REPLACE仓U建服务器连接通道DEFINE CHANNEL SVRCONNNAMECHLTYP( SVRCONN REPLACE 显示队列的所有属性DISPLAYQUEU(QNAM) ALL显示队列的所选属性DISPLA Y QUEUEQNAMEDESCFGETPUTDISPLAYQUEUE QNAMEMAXDEPTHURDEPTH显示队列管理器的所有属性DISPLA Y QMGR ALL显示进程定义DISPLAYDROCE

6、SSDRONAMIE更改属性ALTER QMGRDESCR NEW DESCRIPTION ALTER QLOCAL( QNAME PUT(DISABLEDALTER QALIAS(QNAMJE TARGQ( TARGQNA|E删除队列DELETEQLOCAL QNAMEDELETE QREMOTE(QRNAME清除队列中的所有消息CLEAR QLOCAL(QNAME修改 MQ 的字符集(437, 1381, 891) CCSID:437 =ASCII/GB2312 . CCSID:500 = EBCDIC/IBM935.CCSID:1381二 UNICODE runmqsc 队列管理器名称

7、alter qmgr ccsid(437) end二. 配置一个能够通信的远程连接以上讲述了 MQ的基本命令操作,但只知道这些是没有实际意义的。MQ的最终目的是实现远程通信,所以下面就以一个具体的例子 来说明如何实现远程连接。这个例子的目的是建立可以实现消息传递的一对MQ服务器,它们分别基于NT和UNIX平台。首先在NT端建一队列管理器crtmqm q QM_NT启动队列管理器strmqm QM_NT运行MQ控制台命令ru nm qsc QM_NT创建死信队列DEFINEQL(NT.DEADQ) DEFPSIST( YES) REPLACE更改队列管理器属5 / 14最新资料推荐性,设置其死信

8、队列ALTER QMGR DEADQIT.DEADQ仓U建进程定义DEFINE PROCESS ( P_NT + APPLTYPE(WINDOWSNTAPPLICID( runmqchl -c SDR_NTm QM_NT创建 本地传 输队列DEFINE QL(QT_NT) USAGE(XMITQ)DEFPSIST(YES) +INITQ ( SYSTEM.CHANNELNITQ +PROCESS(P_NT) REPLACE仓U建远程队列定义,对应于 UNIX机器上的本地队列 Q_UNIX,传输队列为 QT_NT DEFINEQREMOT(E2R_NT +RNAME (Q_UNIX RQMNAM

9、gQM_UNIX +XMITQ(QT_NT创建发送方通道,其传输队列为 QT_NT,远程主机地址为,侦听端口为1414DEFINECHANNEL( SDR_NTCHLTYPE( SDR) +CONNAME((1414) )XMITQ (QT_NT REPLACE创建服务器连接通道 DEFINE CHANNEL(S_NT CHLT YPE( SVRCONNREPLACE在UNIX端创建队列管理器crtmqm qQM_UNIX启 动队列 管理器strmqm QM_UNIX添加侦听程序修改/etc/services文件,加入一行:MQSeries 1414/t

10、cp #MQSeries channel listener修 改 /etc/inetd.conf文件,加入一行(启动侦听程序)MQSeries stream tcp no waitmqm /usr/lpp/mqm/b in/amqcrstaamqcrsta m QM_UNIX运行以下命令,以使修改起作用refresh s inetd运行MQ控制台命令更改队列管理器属QL(UNIX.DEADQDEFPSIST( YESREPLACE性,设置其死信队列ALTER QMGR DEADQ(UNIX.DEADQ创建接收方通道,其名字必须与远程发送方相同DEFINECHANNELSDR_NT CHLTYP

11、E( RCVR REPLACE仓U建本地队列 DEFINE QL(Q_UNIX DEFPSIST(YES)REPLACE仓U建服务器连接通道DEFINE CHANNEL( S_UNIX)CHLTYPE(SVRCONNREPLACE经过以上操作之后,远程连接的配置工作完成。接下来需要验证配置是否正确。runm qchlc SDR_NTh从NT端发送消息到 UNIX在UNIX端接收消息在NT端启动发送方通道QM_NT或 start chl(SDR_NT)端 amqsput QR_NT QM_NT若能收到消/usr/mqm/samp/bi n/amqsget Q_UNIX QM_UNIX息,说明配置

12、成功。另,在NT下一般情况下在建立队列管理器时会自动建立侦听器,启动队列管理器时则会自动启动侦听程序。当然也可以手动配置侦听程序。修改 wi nn tsystem32driversetcservices文件,在文件中加入一行:MQSeries 1414/tcp #MQSeries channel listener启动侦听程序runm qlsr t tcp p 1414 m QM_NT 上说明了怎样建立简单的单向传输网络消息从NT端传送到UNIX端。建立从UNIX端到NT端的远程连接和以上相仿,要建立双向的传输网络也是同样的道理。三. 配置JNDI用JMS实现消息的发送和接收时,经常会用到JND

13、I。因为JNDI这种方式比较灵活,对于编程也比较简单。在安装了 MQSeries Client for Java之后,在javabin 目录下找到 JMSAdmin.config 文件。该文件主要用来说明Con text的存储方式及存储地址,对应于文件中的两个参数 INITIAL_CONTEXT_FACTORY PROVIDER_URL 典型的JMSAdmin.config文件内容如下:#INITIAL_CONTEXT_FACTOR Y二com.su n.jn di.ldap.LdapCtxFactoryINITIAL_CONTEXT_FACTOR Y=com.su n.jn di.fsc o

14、n text.RefFSCo ntext Factory#INITIAL_CONTEXT_FACTOR Y二com.ibm.ejs. ns.j ndi.CNI ni tialCo nte xtFactory#PROVIDER_URL=ldap:/polaris/o二ibm,c=usPROVIDER_URL二file:/d:/temp#PROVIDER_URL=iiop:/localhost/#SECURITY_AUTHENTICATIO N二noneINITIAL_CONTEXT_FACTOR表示 JMSAdminTool 使用的服务提供商。当前有三种受支持的值。com.sun.jndi.ld

15、ap.LdapCtxFactory用于 LDAP,如果使用它就必须安装一个LDAP服务器。com.s un.jn di.fsc on text.RefFSC on textFactory用于文件系统上下文,它只需要使用者提供存放上下文的文 件路径。com.ibm.ejs.ns.jndi.CNInitialContextFactory是专门为websphere提供的,它需要和 websphere的CosNaming资源库一起 使用。PROVIDER_UR表示会话初始上下文的 URL,由JMSAdmintool 实现的所有JNDI操作的根。它和 INITIAL_CONTEXT_FACTORY一 对

16、应ldap:/host name/c on text name用于LDAPfile:drive:/path name用 于 文 件 系统上下文iiop:/host name:port/?TargetC on text=ctx用于访问websphere CosNami ng 名称空间最后还有一个参数SECURITY_AUTHENTICATION于说明JNDI是否把安全性凭证传 递给了您使用的服务供应商。只有当使用了 LDAP服务供应商时,才使用此参数。此参数有三个值,none (匿名认证)、simple (简单认证)和CRAM-MD认证机制。如果没有提供有效值,缺省值为 none。确认配置文件之

17、后,可以在 javabi n目录下启动JMSAdmi n控制台。也可以在任何目录下用下面的命令来启动控制台:JMSAdmin cfg MQ_JAVA_INSTALL_PATHjavabi nJMSAdmi n.config其中MQ_JAVA_INSTALL_PATH MQSeries Clie nt for Java安装的根目录。若启动失败,则好好检查一下您的环境变量是否设置正 确。根据我 个人的 经验,除了把 com.ibm.mq.jar 和 com.ibm.mqjms.jar 加入到环境变量外,还要把 fscon text.jar和providerutil.jar加入到环境变量。进入JMS

18、Admin控制台后,您可以自由定义subcon text。对于子上下文的操作,主要有一下命令:display ctxdefi ne ctx(ctx name)cha nge ctx(ctx name)cha nge ctx(二up)cha ngectx(=i nit) deletectx(ctx name)当然,在这里的主要任务并非是用来定义sub con text ,而是用来定义以下几个对象:MQQueueConnection FactoryMQTopicCo nn ectio nFactoryMQQueueMQTopic(还有其它的一些对象,女口 MQXAQueueConnectionFa

19、ctory等,不常用到,在此不作说明。)可以使用很多动词来操纵目录名称空间中的受管理对象。ALTER、DEFINE DISPLAY DELETE COPY和 MOVE 它们的用法 都算比较简单,这里只列举一二以作说明。例一:定义一 QueueConnectionFactory,连接主机 8 ,端口 1414 DEFINE QCF(EXAMPLEQCF)+ DESC(ExampleQueue Connection Factory)+TRAN(CLIENT)+HOST(8)+QMGR(QM_EXAMPLE)+CHAN(S_EXAMPLE)+PORT(1414

20、)+CCSID(1381)例二:定义一 Queue,其对应于 MQ中的Q_EXAMPLE DEFINE Q(EXAMPLEQL)+DESC(Local queue)+QMGR(QM_EXAMPLE)+QUEUE(Q_EXAMPLE)+CCSID(1381)四.用JMS实现MQ编程上面我们说明了怎样用JMSAdminTool 定义MQ对象的上下文。我们的最终目的是要用JMS来实现MQ编程,以实现在程序中对 MQ队列进行收、发消息。所以,下面我们将重点讨论一下 MQ的JMS实现。如果您对JMS编程很熟悉,那么您也就会用JMS来实 现MQ编程,因为用JMS来编写MQ程序与编写一般的JMS程序没 有太

21、大的差别。举个例子,当我们想发送一条消息到 MQ的队列中,再从该队列 中取回消息时,我们编程时主要有四个步骤。首先我们要初始化在程序中要用到的对象,然后才可以发送消息 到队列中去,再就是收取消息了,最后要清除那些永久对象。这些都和普通的JMS程序相当。程序的源代码如下:importimport java.util.Hashtable;javax.jms.*;import javax .namin g.*;importjavax .namin g.directory.*;public class sampleprotectedQueueC onn ecti on Factoryfactory=n

22、 ull;15 / 14protectedprotected TextMessageprotectedQueueConnection connection;QueueSession queueSession;outMessage;protected QueueSe nder queueSe nder;protected QueueReceiver queueReceiver; public staticfinal String qcfLookup二EXAMPLEQCF;public static finalStri ng qLookup=EXAMPLEQL; public static fin

23、al Stri ngicfcom.s un.jn di.fsc on text.RefFSC on textFactory;public String url二file:/d:/temp;public voidsample In it() throws Excepti on Hashtable en vir onmentnewHashtable();en viro nmen t.put(Co ntextNITIAL_CONTEXT_FACTOR Y,icf);en viro nmen t.put(Co ntext.PROVIDER_URL,url);en viro nmen t.put(Co

24、ntext.REFERRAL,throw);Con textctx二new InitialDirContext(environment);factory(QueueC onn ectio nFactory)ctx .lo okup(qcfLookup);Queueq1= null;q1=(Queue)ctxo okup(qLookup);conn ecti onfactory.createQueueC onn ectio n();queueSessi onconn ectio n.createQueueSessi on (false,Sessio n.AUTO_ACKNOWLEDGE);que

25、ueSenderqueueSessi on .createSe nder(q1);queueSe nder.setDeliveryMode(DeliveryMode.NON_PERSISTENT);outMessagequeueSessi on. createTextMessage();queueReceiverqueueSessi on .createReceiver(q1);conn ecti on. start();public voidsen dMessageOut(Stri ngmessage) throws JMSExceptio noutMessage.setText(messa

26、ge);queueSe nder.se nd(outMessage); public String 最新资料推荐returnreceiveMessage() throws Excepti on(TextMessage)queueReceiver.receive().getText();public voidsampleClose() throwsJMSException17 / 14queueSessi on .close();conn ecti on. close();public static voidmain( Stri ng args)String rec; sample sp =ne

27、w sample();try sp.sample In it();World!);sp.se ndMessageOut(Hello javaan g.Thread.sleep(4000);rec=sp.receiveMessage();System.out.pri ntl n(Receivetextis:+rec);sp.sampleClose();catch(Excepti one)e.pr in tStackTrace();五.远程管理MQ在WINDOW平台下具有图形化管理界面,但在UNIX平台下却只能通过命令行来进行操作。这样就给使用者带来很大的不便。我们都希望能通过图形界面来进行管理配置。 为了实现我们的想法,我们就必须建立远程管理。实现远程管理有以下几个步骤:1 .被管理

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论