MQ经验总结

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

MQ常用的一些管理操作发布:2008-12-1510:49|作者:胡伟红|来源:本站原创|查看:28次觉得很有参考价值,跟大家分享。1.安装好MQ之后,本身MQ会给你提供一些src的sample,有些是非常有用的,前提是你要装sample,可以将那些src的东东按照自己的需求修改后编译使用,exam(linux):gcc-odestnamesrcname-lmqm2.生产环境的QM由于某种需求,要更换服务器,又要保证在很短的时间内切换完成,那么怎么将原有定义的mq资源导出来,并形成ddl脚本呢?IBM提供了这么一个简单有效的导出工具(里面又各种平台的导出脚本),可以在ibm官方网站上搜索ms03,将它下载下来使用;注意要启动MQ的commandserverstrmqcsvQMnameexam(linux):tar-zxvfms03.tar.Zlsmake-fmakefile.linuxldafsls*.TST./saveqmgr.linux-mTIANJIN_QM-v'53'VISAVEQMGR.TST导出命令saveqmgr.linux会在本目录下生成一个SAVEQMGR.TST的文件里面就是所有QM对象资源的定义。3.常用命令备忘#修改通道alterCHANNEL(GUOJIA_SHENZHEN)CHLTYPE(SDR)CONNAME('10.12.131.12(1414)')XMITQ(GUOJIA_SHENZHEN_XMIT)DISCINT(0)TRPTYPE(TCP)#启动通道(runmqsc)startchl(通道名称)#检察通道状态dischs(GUIZHOU_GY_GUOJIA)#允许远程客户端管理器连接su-mqmrunmqscQMALTERCHANNEL(SYSTEM.ADMIN.SVRCONN)CHLTYPE(SVRCONN)MCAUSER(mqm)#启动一个QMstrmqmHeaven#启动一个QM的commandserverstrmqcsvHeaven#启动一个侦听runmqlsr-mHeaven-tTCP-p1415&#停止队列管理器endmqmQmgrName受控停止endmqm–iQmgrName立即停止endmqm–pQmgrName强制停止#显示QM的状态dspmq–mQmgrName#channel不通的解决办法runmqscstopchl(guojia_hainan)resolvechl(guojia_hainan)action(commit)resetchl(guojia_hainan)seqnum(1)#创建缺省队列管理器,拥有1000个句柄,使用线性循环日志,容量为10240×4K/文件,主文件30个,辅文件32个crtmqm-t5000-h1000-lc-lf10240-lp30-ls32Heaven#设置cpu个数为1setmqcap1#从配置文件中读入初始化命令runmqscHeaven<mqconfig.txt#创建完QM之后在/var/mqm/qmgrs/[YourQueueManagerName]/qm.ini文件最后加入以下行:Channels:AdoptNewMCA=ALLMaxChannels=1000MaxActiveChannels=1000#如何清除MQ队列管理器遗留的共享内存和信号量解决方法:运行以下脚本或命令。ipcs-m|grepmqm|awk'{print$2}'|xargs-iipcrm-m{}ipcs-s|grepmqm|awk'{print$2}'|xargs-iipcrm-s{}mq经验总结首先了解什么是mq?mq的作用是什么?mq是通讯中间件。他的作用是省去开发人员开发通讯工具的时间,节省开发成本,提高开发效率。mq的使用,如何安装mq?根据以往的经验,win版的mq比较容易安装,傻瓜式,一路next就可以。aix版本的用smitty安装。linux版本用rpm-ivh安装mq中一些名称的概念:队列管理器:简单的说就是一个大容器的管理员,这个大容器里放了很多东西。队列:大容器里的东西,存放消息的盒子。通道:大容器和大容器之间,程序和容器之间进行通讯的途径。mq是如何实现通讯的?mq的通讯方式有两种,通俗的说就是mq之间进行通讯,开发的程序和mq之间的通讯。mq之间进行通讯:通过发送接收通道建立tcp连接进行消息传输,称为server对server开发的程序和mq之间的通讯:通过服务器连接通道进行传输,client对server如何配置两台mq使之相互进行通讯?首先要规划好两个队列管理器之间使用的ip和端口,假设我们使用ip端口192.168.0.11414192.168.0.21415第一步建立队列管理器crtmqm-lc-lf100-lp3-ls3QM1解释下:-lc是采用循环日志-lf是每块日志的大小,4k为单位的,100就是100*4k-lp是主逻辑日志的数量-ls是辅逻辑日志的数量QM1是队列管理器名称第二步启动队列管理器strmqmQM1第三步定义队列管理器中的队列和通道等先运行runmqscQM1首先要保证运行该命令的用户属于mqm组运行完后进入mq命令窗口定义本地队列defql(QL1)先解释什么是本地队列,然后解释命令的含义(以下同)本地队列是存储信息的盒子,用户可以从本地队列里取消息,对方发送消息的目的地也是本地队列。def是define的缩写,mq支持一些命令的缩写。ql是queuelocal的缩写,表示本地队列,括号内是本地队列名定义远程队列defqr(QR1)rname(QL2)rqname(QM2)xmitq(QT1)远程队列是相对于本地队列的,当用户希望往另一个队列管理器发消息的时候,配置好远程队列,用户直接放消息到该队列就可以,mq会传输到另一方的本地队列中。以上面的例子说明,当我们把消息放入该远程队列后,消息会传输到QM2队列管理器中的QL2队列中。qrqueueremote的缩写rname指定的远程队列管理器上的队列名rqname远程队列管理器xmitq所要用的传输队列定义传输队列defql(QT1)usage(xmitq)triggertrigtype(first)initq(system.channel.initq)trigdata(QM1.QM2)传输队列是传输的介质,消息是通过传输队列进行传输的。usage用途xmitq是传输队列trigger消息触发开关trigtype触发类型第一条消息触发initq初始队列trigdata触发数据定义发送通道defchl(QM1.QM2)chltype(sdr)conname('192.168.0.2(1415)')trptype(tcp)xmitq(QT1)发送通道就相当于建立一个tcp的连接chlchannel的缩写chltype通道类型sdr是发送通道conname连接名包括对方的ip和端口trptype通讯类型tcp通讯xmitq使用的传输队列定义接受通道defchl(QM2.QM1)接收通道是被动的,只定义名字就可以。大家注意,接收通道的名字一定要和发送通道名一致,他们是靠名字来匹配。第四步配置监听器是对方mq管理器来探测,本地要给对方一个回应,监听器就是起这个作用的。如果是5.3版本只能在命令行里运行runmqlsr-mQM1-ttcp-p1414如果是6.0版本可以runmqscQM1里运行deflistener(LSR.QM1)trptype(tcp)port(1414)control(qmgr)解释下trptype监听类型port监听端口control监听控制,如果是qmgr则在队列管理器启动的时候监听也自动启动。第五步配置另外一个队列管理器简单的说一下,和上面的差不多,只不过名字不一样。大家自己尝试下:)写的手累了,下次补充!继续上面我们说完了如何建队列管理器,接下来我们说说建完以后如何测试两边是不是正常传输,我们可以用命令行方式向远程队列中放入测试消息,以aix为例,用/usr/mqm/samp/bin/amqsput命令就可以放入消息,格式为:amqsputQR1QM1解释下:QR1是你要放入的队列名,QM1是你要放入的队列管理器名。输入以上命令后就可以写入消息了,一下回车就是发送一条消息,两次回车就是退出。用/usr/mqm/samp/bin/amqsget命令就可以取消息,格式为amqsgetQL2QM2解释下:QL1是你要取消息的队列名,QM2是你要取消息的队列管理器名。输入完命令后就会显示所有消息。不过要注意一点,命令行方式的输入和取消息有字节限制。如果只是简单的浏览一下消息可以使用/usr/mqm/samp/bin/amqsbcg命令格式和取消息一样,但是该命令不会把消息取出来,运行完该命令后消息还是保存在队列中。正常情况下消息的传输流程(只说正常的,排错一会再说)QR1-QT1-QL2消息被放入到远程队列中,远程队列通过传输队列传输,最后传输到QM2中的本地队列。出现问题,我们怎么办?1不能放入消息。一般这种情况应该大部分是远程队列中的传输队列那个参数配置的不正确。还有可能是队列的允许放入这个参数设置成了禁止。基本上就这两种情况。2发送通道和接收通道的状态不是running首先说明,如果长时间没有消息传输,通道的状态会变成不活动状态,这是正常现象。如果你手动启动通道后,通道状态还不是running,那先查看错误日志(两边的队列管理器都要查看)/var/mqm/qmgrs/QM1/errors中的错误日志,通常编号01的日志是最新日志。常见情况是网络不通导致的通道不通!所以首先要保证网络是正常的,我们可以同过telnet对方的IP加监听端口的方法来查看是不是正常。telnet192.168.0.21415再有的情况是两边的配置属性有问题,如两边发送和接收通道名不一致,发送通道的连接名配置错误,发送通道中的传输队列配置错误。我们也可以执行mq中的一个命令来查看通道是不是正常runmqscQM1pingchl(QM1.QM2)ping操作来查看两边的通道是不是正常,如果正常会返回ping完成。3放入的消息没有到QM2的队列中注意:消息一定要放入远程队列中,如果放入传输队列中消息会被放入死信队列中。(上面忘记定义死信队列了,晕)再有看看远程队列中的属性是不是配置错误,如rname,rqname,xmitq等属性。也有可能是发送接收队列的消息序列号不一致。如果不一致做一下reset操作。还有可能是上一批消息没有提交。可以做一个resolve操作。也是要先看错误日志4消息到达QM2队列QL2中,但是取不出来QL2的允许取出属性是不是被禁止了。这样再查看以下QM2到QM1的传输是不是正常。都正常就OK了。

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功