收藏 分享(赏)

IBM MQSeries命令使用指南.doc

上传人:j35w19 文档编号:7541110 上传时间:2019-05-21 格式:DOC 页数:10 大小:384KB
下载 相关 举报
IBM MQSeries命令使用指南.doc_第1页
第1页 / 共10页
IBM MQSeries命令使用指南.doc_第2页
第2页 / 共10页
IBM MQSeries命令使用指南.doc_第3页
第3页 / 共10页
IBM MQSeries命令使用指南.doc_第4页
第4页 / 共10页
IBM MQSeries命令使用指南.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、IBM MQSeries 使用指南随着计算机网络和分布式应用的不断发展,远程消息传递越来越成为应用系统中不可缺少的组成部分。商业消息中间件的出现保证了消息传输的可靠性,高效率和安全性,同时也减少了系统的开发周期。目前应用最多的消息中间件产品为 IBM MQSeries。本文就针对 MQ 的基本操作与配置进行详细的阐述,希望对读者有所帮助。一MQ 基本操作MQ 中有几个很重要的组件:队列管理器(QueueManager)、队列(Queue)和通道(Channel)。其基本的操作方法如下:创建队列管理器crtmqm q QMgrName-q 是指创建缺省的队列管理器删除队列管理器dltmqm Qm

2、grName启动队列管理器strmqm QmgrName如果是启动默认的队列管理器,可以不带其名字停止队列管理器endmqm QmgrName 受控停止endmqm i QmgrName 立即停止endmqm p QmgrName 强制停止显示队列管理器dspmq m QmgrName运行 MQSeries 命令runmqsc QmgrName如果是默认队列管理器,可以不带其名字往队列中放消息amqsput QName QmgrName如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字从队列中取出消息amqsget QName QmgrName如果队列是默认队列管理器中的队列,可以不

3、带其队列管理器的名字启动通道runmqchl c ChlName m QmgrName启动侦听runmqlsr t TYPE p PORT m QMgrName停止侦听endmqlsr -m QmgrNameMQSeries 命令定义死信队列DEFINE QLOCAL(QNAME) DEFPSIST(YES) REPLACE设定队列管理器的死信队列ALTER QMGR DEADQ(QNAME)定义本地队列DEFINE QL(QNAME) REPLACE定义别名队列DEFINE QALIAS(QALIASNAME) TARGQ(QNAME)远程队列定义DEFINE QREMOTE(QRNAME)

4、 +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

5、 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(

6、SVRCONNNAME) CHLTYPE(SVRCONN) REPLACE显示队列的所有属性DISPLAY QUEUE(QNAME) ALL显示队列的所选属性DISPLAY QUEUE(QNAME) DESCR GET PUTDISPLAY QUEUE(QNAME)MAXDEPTH CURDEPTH显示队列管理器的所有属性DISPLAY QMGR ALL显示进程定义DISPLAY PROCESS(PRONAME)更改属性ALTER QMGR DESCR(NEW DESCRIPTION)ALTER QLOCAL(QNAME) PUT(DISABLED)ALTER QALIAS(QNAME) TA

7、RGQ(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创建死信

8、队列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 机器上的本地队列

9、Q_UNIX,传输队列为 QT_NTDEFINE QREMOTE(QR_NT)+RNAME(Q_UNIX) RQMNAME(QM_UNIX)+XMITQ(QT_NT)创建发送方通道,其传输队列为 QT_NT,远程主机地址为 10.10.10.2,侦听端口为 1414DEFINE 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

10、启动队列管理器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)

11、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

12、chl(SDR_NT)从 NT 端发送消息到 UNIX 端amqsput QR_NT QM_NT在 UNIX 端接收消息/usr/mqm/samp/bin/amqsget Q_UNIX QM_UNIX若能收到消息,说明配置成功。另,在 NT 下一般情况下在建立队列管理器时会自动建立侦听器,启动队列管理器时则会自动启动侦听程序。当然也可以手动配置侦听程序。修改winntsystem32driversetcservices 文件,在文件中加入一行:MQSeries 1414/tcp #MQSeries channel listener启动侦听程序runmqlsr t tcp p 1414 m QM

13、_NT以上说明了怎样建立简单的单向传输网络。消息从 NT 端传送到 UNIX 端。建立从 UNIX 端到 NT 端的远程连接和以上相仿,要建立双向的传输网络也是同样的道理。三配置 JNDI用 JMS 实现消息的发送和接收时,经常会用到 JNDI。因为 JNDI 这种方式比较灵活,对于编程也比较简单。在安装了 MQSeries Client for Java 之后,在javabin 目录下找到JMSAdmin.config 文件。该文件主要用来说明 Context 的存储方式及存储地址,对应于文件中的两个参数 INITIAL_CONTEXT_FACTORY 和 PROVIDER_URL。典型的J

14、MSAdmin.config 文件内容如下:#INITIAL_CONTEXT_FACTORY=com.sun.jndi.ldap.LdapCtxFactoryINITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory#INITIAL_CONTEXT_FACTORY=com.ibm.ejs.ns.jndi.CNInitialContextFactory#PROVIDER_URL=ldap:/polaris/o=ibm,c=usPROVIDER_URL=file:/d:/temp#PROVIDER_URL=iiop:/loc

15、alhost/#SECURITY_AUTHENTICATION=noneINITIAL_CONTEXT_FACTORY 表示 JMSAdmin Tool 使用的服务提供商。当前有三种受支持的值。com.sun.jndi.ldap.LdapCtxFactory 用于 LDAP,如果使用它就必须安装一个 LDAP 服务器。com.sun.jndi.fscontext.RefFSContextFactory 用于文件系统上下文,它只需要使用者提供存放上下文的文件路径。com.ibm.ejs.ns.jndi.CNInitialContextFactory 是专门为 websphere 提供的,它需要和

16、 websphere 的 CosNaming 资源库一起使用。PROVIDER_URL 表示会话初始上下文的 URL,由 JMSAdmin tool 实现的所有 JNDI操作的根。它和 INITIAL_CONTEXT_FACTORY 一一对应。ldap:/hostname/contextname 用于 LDAPfile:drive:/pathname 用于文件系统上下文iiop:/hostname:port/?TargetContext=ctx 用于访问 websphere CosNaming 名称空间最后还有一个参数 SECURITY_AUTHENTICATION,用于说明 JNDI 是否把

17、安全性凭证传递给了您使用的服务供应商。只有当使用了 LDAP 服务供应商时,才使用此参数。此参数有三个值,none(匿名认证)、simple(简单认证)和 CRAM-MD5认证机制。如果没有提供有效值,缺省值为 none。确认配置文件之后,可以在javabin 目录下启动 JMSAdmin 控制台。也可以在任何目录下用下面的命令来启动控制台:JMSAdmin cfg MQ_JAVA_INSTALL_PATHjavabinJMSAdmin.config其中 MQ_JAVA_INSTALL_PATH 为 MQSeries Client for Java 安装的根目录。若启动失败,则好好检查一下您的

18、环境变量是否设置正确。根据我个人的经验,除了把 com.ibm.mq.jar 和 com.ibm.mqjms.jar 加入到环境变量外,还要把fscontext.jar 和 providerutil.jar 加入到环境变量。进入 JMSAdmin 控制台后,您可以自由定义 sub context。对于子上下文的操作,主要有一下命令:display ctxdefine ctx(ctxname)change ctx(ctxname)change ctx(=up)change ctx(=init)delete ctx(ctxname)当然,在这里的主要任务并非是用来定义 sub context,而是

19、用来定义以下几个对象:MQQueueConnectionFactoryMQTopicConnectionFactoryMQQueueMQTopic(还有其它的一些对象,如 MQXAQueueConnectionFactory 等,不常用到,在此不作说明。)可以使用很多动词来操纵目录名称空间中的受管理对象。ALTER、DEFINE、DISPLAY、DELETE、COPY 和 MOVE,它们的用法都算比较简单,这里只列举一二以作说明。例一:定义一 QueueConnectionFactory,连接主机 10.10.10.18,端口 1414DEFINE QCF(EXAMPLEQCF)+DESC(E

20、xample Queue Connection Factory)+TRAN(CLIENT)+HOST(10.10.10.18)+QMGR(QM_EXAMPLE)+CHAN(S_EXAMPLE)+PORT(1414)+CCSID(1381)例二:定义一 Queue,其对应于 MQ 中的 Q_EXAMPLEDEFINE Q(EXAMPLEQL)+DESC(Local queue)+QMGR(QM_EXAMPLE)+QUEUE(Q_EXAMPLE)+CCSID(1381)四用 JMS 实现 MQ 编程上面我们说明了怎样用 JMSAdmin Tool 定义 MQ 对象的上下文。我们的最终目的是要用 J

21、MS 来实现 MQ 编程,以实现在程序中对 MQ 队列进行收、发消息。所以,下面我们将重点讨论一下 MQ 的 JMS 实现。如果您对 JMS 编程很熟悉,那么您也就会用 JMS 来实现 MQ 编程,因为用 JMS 来编写 MQ 程序与编写一般的 JMS 程序没有太大的差别。举个例子,当我们想发送一条消息到 MQ 的队列中,再从该队列中取回消息时,我们编程时主要有四个步骤。首先我们要初始化在程序中要用到的对象,然后才可以发送消息到队列中去,再就是收取消息了,最后要清除那些永久对象。这些都和普通的 JMS 程序相当。程序的源代码如下:import java.util.Hashtable;impor

22、t javax.jms.*;import javax.naming.*;import javax.naming.directory.*;public class sample protected QueueConnectionFactory factory=null;protected QueueConnection connection;protected QueueSession queueSession;protected TextMessage outMessage;protected QueueSender queueSender;protected QueueReceiver qu

23、eueReceiver;public static final String qcfLookup=“EXAMPLEQCF“;public static final String qLookup=“EXAMPLEQL“;public static final String icf = “com.sun.jndi.fscontext.RefFSContextFactory“;public String url =“file:/d:/temp“;public void sampleInit() throws Exception Hashtable environment = new Hashtabl

24、e();environment.put(Context.INITIAL_CONTEXT_FACTORY, icf);environment.put(Context.PROVIDER_URL, url);environment.put(Context.REFERRAL, “throw“);Context ctx=new InitialDirContext(environment);factory = (QueueConnectionFactory)ctx.lookup(qcfLookup);Queue q1=null;q1=(Queue)ctx.lookup(qLookup);connectio

25、n = factory.createQueueConnection();queueSession = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);queueSender = queueSession.createSender(q1);queueSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);outMessage = queueSession.createTextMessage();queueReceiver = queueSession.createRece

26、iver(q1);connection.start();public void sendMessageOut(String message) throws JMSException outMessage.setText(message);queueSender.send(outMessage);public String receiveMessage() throws Exceptionreturn (TextMessage)queueReceiver.receive().getText();public void sampleClose() throws JMSException queue

27、Session.close();connection.close();public static void main(String args)String rec;sample sp = new sample();try sp.sampleInit();sp.sendMessageOut(“Hello World!“);java.lang.Thread.sleep(4000);rec=sp.receiveMessage();System.out.println(“Receive text is : “+rec);sp.sampleClose();catch(Exception e) e.pri

28、ntStackTrace();五远程管理MQ 在 WINDOWS 平台下具有图形化管理界面,但在 UNIX 平台下却只能通过命令行来进行操作。这样就给使用者带来很大的不便。我们都希望能通过图形界面来进行管理配置。为了实现我们的想法,我们就必须建立远程管理。实现远程管理有以下几个步骤:1被管理队列管理器上的命令队列 SYSTEM.ADMIN.COMMAND.QUEUE 存在并可用。对于 MQ 2 版本应执行 amqscoma.tst 脚本来创建。2使用 strmqcsv 命令来启动被管理队列管理器上的命令服务器。3确定被管理队列管理器上的服务器连接通道 SYSTEM.ADMIN.SVRCONN

29、是否存在,如果不存在则创建它。4一般 Unix、Linux 平台中 MQ 默认的字符集为 819,而 Windows 平台为1381,所以你必须改变其字符集,使两边的字符集相同。一般改被管理的字符集。5如果被管理队列管理器上的操作用户与管理队列管理器上的操作用户不同,那么你首先要确认管理队列管理器上的操作用户在被管理队列管理器上存在并且有管理 MQ 的权限,再者,你需要修改服务器连接通道 SYSTEM.ADMIN.SVRCONN的 MCAUSER 属性为管理队列管理器上的操作用户。6启动被管理队列管理器上的侦听器。做完这些工作之后,直接在管理队列管理器的 MQ 管理工具中显示被管理队列管理器即

30、可。然后你就可以象操作本地队列管理器一样,在被管理队列管理器上定义你需要的 MQ 对象。六通道维护在配置远程连接的时候,我们曾经创建过进程定义。那我们为什么要去创建进程定义呢?这就涉及 MQ 通道维护的概念。通道长时间没有消息触发就会自动断开连接,不再保持运行状态。时间的长短可以由自己设定,默认值为 6000 秒。消息请求再次来临的时候,就必须再次启动通道。有些通道,如服务器连接通道、接收方通道等是自动触发启动的。当消息请求发送到通道后,通道立即启动,进入运行状态。但也有一些通道不会自动启动,最典型的就是发送方通道。当有消息请求需要使用通道进行消息传递的时候,发送方通道也不会自动启动并把消息发

31、送到远程队列,而是把消息留在了与其相关联的传输队列中。但是,在实际应用中我们又不可能每过一段时间去启动一次通道,或当有消息来再去启动通道。那应该怎么办?首先我们创建一个进程定义,这个进程定义的目的就是用来启动发送方通道。然后我们在传输队列的进程名称属性栏指定刚才定义的进程定义名称,再把触发器控制开关打开。这样,当有消息进入传输队列后,传输队列的触发器会启动触发执行指定的进程,从而启动发送方通道,把消息传输到远程队列中去。七总结也许你会说你已经理解了 MQ,包括基本概念、配置、管理以及程序的编写,那么恭喜你。我也希望如此。不过 MQ 也许并非如此简单,因本人水平有限,也只能到此为止,希望大家再接再厉。顺便说一句,如果有什么好想法,千万别忘了告诉我一声。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报