WebSphereMQ基础©2006GuangzhouSunriseElectronicsDevelopmentCo.,Ltd.广州从兴电子开发有限公司BSS需求部黄翠昭(huangcuizhao@revenco.com)综述本次培训共分四节•WebSphereMQ基础原理•WebSphereMQ操作与配置•MQ通信•MQ常见故障预计培训总时长3小时第一节WebSphereMQ基础原理中间件作为一种独立的系统软件或服务程序,是位于平台(硬件和操作系统)和应用之间的通用服务远程过程调用(RemoteProcedureCall)面向消息的中间件(Message-OrientedMiddleware)对象请求代理(ObjectRequestBrokers)什么是中间件??日常工作常见的中间件CICS/WAS/MQMQ消息传输消息传输模拟场景本地入口远程队列传输队列本地队列对端出口死信队列发送通道MQ消息在队列里面的传输本地系统远端系统RemoteQueueAliasQueueApplication1Application2MQPUTMQGETQueueManager:QM1QueueManager:QM2TransmissionQueue(LocalQueue)DestinationQueue(LocalQueue)DeadLetterQueueMessageChannel(发送通道(SDR))WebsphereMQWebsphereMQ是IBM的商业通讯中间件,属于面向消息的中间件,为不同平台或软件提供可靠、异步、不重复的消息传送。system队列管理器MQI通道通道队列消息ApplicationMQPUTApplicationMQGETMQ构成对象消息=消息描述符+应用程序数据报文消息-不要求接收端应用程序产生应答消息请求消息-要求接收端应用程序产生应答消息应答消息-对前一条请求消息的应答报告消息-报告一些预料到的或意外的事件MQ构成对象队列是用于存储消息的数据结构本地队列-应用程序连接到的队列管理器的本地队列远程队列-远程队列管理器的队列别名队列-不是一个队列,用于访问另一个队列的对象模型队列-模型队列定义了一套本地队列的属性集合MQ构成对象发送通道接收通道通道状态MQ通道维护启动通道STARTCHANNEL停止通道STOPCHANNEL强制停止STOPCHANNEL(??)MODE(FORCE)复位通道RESETCHANNELResolve通道RESOLVECHANNELPing通道PINGCHANNEL查看通道状态DISPLAYCHSTATUS修改通道ALTERCHANNEL删除通道DELETECHANNEL查看通道定义DISPLAYCHANNELMQ构成对象侦听器:用于从客户机或其他队列管理器接受网络请求侦听器端口选择:netstat–an|grep***侦听器启动:runmqlsr、endmqlsr侦听器的启动方式有三种:队列管理器、队列管理器启动、手动(默认)。MQ基础术语全称简称中文名称QueueManagerQM队列管理器QueueQ队列QueueLocalQL本地队列QueueRemoteQR远处队列QueueXmitXQ传输队列Channelchannel通道listenerlistener侦听器runmqscrunmqsc命令服务器CCSID编码字符SDRSDR发送者RCVRRCVR接收者第二节WebSphereMQ操作与配置MQ控制命令创建队列管理器crtmqm启动创建队列管理器strmqm删除队列管理器dltmqmMQSC命令模式runmqsc运行通道runmqchl运行侦听器runmqlsr结束侦听器endmqlsr结束队列管理器endmqm显示权限dspmqaut设置/重设权限setmqaut死信队列处理器amqsdlq放置消息amqsput浏览完整的消息amqsbcgMQSC命令defineqlocal(*******)definechl(*******)deleteqlocal(*******)deletechl(*******)pingchannel(*******)startchl(*******)resetchannel(*******)stopchl(*******)displayqlocal(*******)resolvechl(*******)clearqloacl(*******)displaychs(*******)alterend每个命令的第一参数是动词,第二个参数是名词。第三个参数可能是对象名或对象统配符MQ配置文件说明/var/mqm/mqs.ini在安装MQ时创建,每个节点有一个mqs.ini文件对应。/var/mqm/qmgr/sqmname/qm.ini在创建队列管理器时创建该文件,每个节点有一个qm.ini文件对应MQ单向通信环境搭建本地系统10.243.1.1Application1TransmissionQueue(LocalQueue)MQPUTQueueManager:QM1远端系统10.243.1.2Application2DestinationQueue(LocalQueue)MQGETQueueManager:QM2MessageChannelRemoteQueueTCP/IPLU6.2NetBIOSDecNET创建队列管理器CRTMQMQM1启动队列管理器STRMQMQM1定义侦听端口DEFLISTENER(TCP_QM1)TRPTYPE(TCP)CONTROL(QMGR)PORT(1414)定义本地队列DEFINEQLOCAL(QM2_QM1.LQ)DEFPSIST(YES)定义死信队列DEFINEQL(QM1.DEADQ)DEFPSIST(YES)ALTERQMGRDEADQ(QM1.DEADQ)定义传输队列DEFINEQLOCAL(QM1_QM2.XQ)DEFPSIST(YES)USAGE(XMITQ)TRIGGERTRIGTYPE(FIRST)TRIGDATA(QM1_QM2.CHL)INITQ(SYSTEM.CHANNEL.INITQ)定义远程队列DEFINEQLOCAL(QM1_QM2.RQ)DEFPSIST(YES)RNAME(QM1_QM2.LQ)RQMNAME(QM2)XMITQ(QM1_QM2.XQ)定义发送通道DEFINECHANNEL(QM1_QM2.CHL)CHLTYPE(SDR)TRPTYPE(TCP)CONNAME('10.243.1.2(1414)'XMITQ(QM1_QM2.XQ)HBINT(10)BATCHSZ(1)DISCINT(0)定义接收通道DEFINECHANNEL(QM2_QM1.CHL)CHLTYPE(RCVR)TRPTYPE(TCP)HBINT(10)BATCHSZ(1)启动侦听STARTLISTENER(TCP_QM1)启动发送通道STARTCHL(QM1_QM2_CHL)验证配置发送消息AMQSPUTQM1_QM2.RQQM1接收消息AMQSGETQM1_QM2.LQQM2runmqlsr-ttcp-p1414-mQMName课件休息第三节常见MQ故障检查处理MQ日志文件如果队列管理器名称是已知的并且队列管理器是可用的,则出错日志位于:/var/mqm/qmgrs/qmname/errors如果队列管理器不是可用的,则出错日志位于:/var/mqm/qmgrs/@SYSTEM/errors循环日志线性日志日志文件AMQERR01.LOGAMQERR02.LOGAMQERR03.LOG最新的错误消息总是放在AMQERR01中的,其它文件用于保存错误消息的历史。错误消息首先被放置在AMQERR01中。当AMQERR01文件满时,将其复制成AMQERR02。在复制前,将AMQERR02复制到AMQERR03.LOG,而AMQERR03的以前内容将被删除MQ跟踪跟踪路径:/var/mqm/trace一般情况下MQ的跟踪是关闭的strmqtrc控制命令启用或修改跟踪endmqtrc控制命令停止跟踪dspmqtrc转换跟踪文件为可读格式strmqtrc-mTYSG_JKOUT_BANK.QMendmqtrc–mTYSG_JKOUT_BANK.QMdspmqtrc/var/mqm/trace/*rm-rf/var/mqm/trace/AMQ*FMT死信队列DEADQ无法发送的消息都被放置在死信队列DISPLAYQUEUE(DEADQName)AMQSBCGDEADQNameQmgrName目的地指定的目标队列不存在或存在故障故障处理检查日志文件检查死信队列检查MQ配置检查跟踪文件常见故障处理范例先检查对方的端口是否可以连通,telnetipport通道状态异常检查MQ日志文件(AMQERR01.LOG)出错原因手工start发送通道若修改了传输队列或者通道的conname属性,需要先执行resetchannel来复位顺序号sequence,再启动发送通道。常见故障处理范例检查处理的应用程序是否正常队列请求堆积判断堆积的请求是否需要继续处理若需要,可适量加大应用程序的处理进程数若不需处理,可用amqsget把队列中的消息清掉加大本地队列深度ALTERQL(QL_Name)MAXDEPTH(****)常见故障处理范例MQ管理器停止异常ps-ef|grepQMNAME按顺序结束MQ管理器进程:amqpcsea命令服务器amqhasmx记录器amqharmx日志格式化器(仅线性日志)amqzllp0检查点处理程序amqzlaa0队列管理器代理程序amqzfumaOAM进程amqzxma0处理控制器amqrrmfa资源库进程(对于群集)amqzdmaa延迟消息处理程序amqrmppa通道接收方常见故障处理范例检查应用服务器是否正常MQ管理器启动异常检查MQ配置是否完整尝试重建MQ管理器常见故障处理范例磁盘空间满其他异常情况死信队列不可用消息序列号不一致未决消息遗留清理第四节MQ消息操作AmqsbcgMQ消息浏览/usr/mqm/samp/bin/amqsbcgQNameQmgrName/usr/mqm/samp/bin/amqsbcgZQ_UASP_SEND.LQTYSG_JK_11.QM范例amqsput/usr/mqm/samp/bin/amqsputQNameQmgrName/usr/mqm/samp/bin/amqsputZQ_UASP_SEND.RQTYSG_JK_11.QM范例往队列中写消息amqsput/usr/mqm/samp/bin/amqsgetQNameQmgrName/usr/mqm/samp/bin/amqsgetZQ_UASP_SEND.LQTYSG_JK_11.QM范例从队列中读消息CLEARCLEARQLOCAL(QNAME)RunmqscTYSG_JK_11.QMClearql(ZQ_UASP_SEND.LQ)范例清除队列消息Q&A