MQ通道搭建以及连通性检查
场景:项目开发中使用的mq中间件一直不太熟悉,遇到问题就需要问人,公司的同事也不怎么爱搭理,弄的好受伤!不熟悉的时候只是感觉好难,逼的没办法,好好研究下,发现里面的过程也没想象中的难,
经过一番研究,大致熟悉通道应用之间的联系,在此记录,加油!相信自己,我能行!
1 服务器之间通信的连接
1.1 基本框架

远程队列的定义包含:
1、目标队列的位置
设定目标队列名和队列管理器名
2、传输路径
设定传输队列名

1.2 举例
建立168.33.51.242服务器到168.33.130.188服务器的连接
168.33.51.242——定义远程队列,传输队列,通道
echo "DEFINE QREMOTE(IPSP_1) RNAME(IPSP_1) RQMNAME(QMIPSP) XMITQ(SIMUtoIPSP) DEFPRTY(9) DEFPSIST(YES)" | runmqsc QMSIMU
echo "DEFINE QLOCAL(SIMUtoIPSP) USAGE(XMITQ) MAXDEPTH(500000) MAXMSGL(10485760) DEFPSIST(YES) TRIGGER TRIGTYPE(FIRST) TRIGDATA(SIMU.IPSP) INITQ(SYSTEM.CHANNEL.INITQ)" | runmqsc QMSIMU
echo "DEFINE CHANNEL(SIMU.IPSP) CHLTYPE(SDR) LOCLADDR(168.33.51.242) DISCINT(0) conname('168.33.130.188(1414)') XMITQ(SIMUtoIPSP) TRPTYPE(TCP) REPLACE" | runmqsc QMSIMU echo "START CHANNEL (SIMU.IPSP)" | runmqsc QMSIMU 168.33.130.188——定义通道和本地队列
echo "DEFINE CHANNEL(SIMU.IPSP) CHLTYPE(RCVR) TRPTYPE(TCP)" | runmqsc QMCORP
echo "DEFINE QLOCAL (IPSP_1) DEFPSIST(YES) MAXDEPTH(500000) MAXMSGL(1048576) DEFPRTY(9)" | runmqsc QMCORP
242服务器上的远程队列,即188服务器的本地队列,242用来发送消息,188服务器用来接收消息。
242服务器上还有一个本地队列(非命令中的传输队列USAGE(XMITQ)) ,即188服务器上的远程队列,242用来接收188服务器传过来的消息,188用来发送消息到242。
以上命令只是建立了242——>188服务器之间的发送连接,还需要建立一条188——>242服务器之间的发送连接,才能实现双方的相互通信
mq之间的交互:A——>B, B——>A
A——>B:
A的远程队列IPSP_1就是B的本地队列,A要发消息就发到远程队列中,B要收消息就在本地队列接收。
根据A远程队列IPSP_1中的XMITQ(SIMUtoIPSP)字段可跟踪到A的传输队列SIMUtoIPSP(QLOCAL),传输队列的USAGE(XMITQ)字段是传输队列的标志;
根据传输队列SIMUtoIPSP(QLOCAL)中的TRIGDATA(SIMU.IPSP)字段,可以跟踪到A——>B的传输通道SIMU.IPSP;
根据发送的传输通道SIMU.IPSP中的CHLTYPE(SDR)字段可以判断该通道是用来发送的,conname('168.33.130.188(1414)')可以用来判断通信主机信息,XMITQ(SIMUtoIPSP)可以看到使用该通道的传输队列(并不明确)。
要使发送和接受双方能正常通信必须保证接受方和发送方的通道名称相同!so,在B的服务器上可以看到通道SIMU.IPSP的信息,并且CHLTYPE(RCVR),表示用来接收消息。
B——>A:
B的远程队列就是A的本地队列,B要发消息就发到远程队列中,A要收消息就要在本地队列接收。
后续过程和A——>B一样。
Mq排错过程:
mq消息不能正常的收发就要从发送队列去追踪到通道,一个通道两台服务器检查,一个是发送,一个是接受。
一个通道只是单向的通信,检查完之后还要检查另一端的队列——通道信息,确保正常才能够相互实现通信。
建立168.33.130.188服务器到168.33.51.242服务器之间的连接
168.33.130.188——定义远程队列,传输队列,通道
echo "DEFINE QREMOTE(SIMU_1) RNAME(SIMU_1) RQMNAME(QMSIMU) XMITQ(IPSPtoSIMU) DEFPRTY(9) DEFPSIST(YES)" | runmqsc QMIPSP
echo "DEFINE QLOCAL(IPSPtoSIMU) USAGE(XMITQ) MAXDEPTH(500000) MAXMSGL(10485760) DEFPSIST(YES) TRIGGER TRIGTYPE(FIRST) TRIGDATA(IPSP.SIMU) INITQ(SYSTEM.CHANNEL.INITQ)" | runmqsc QMIPSP
echo "DEFINE CHANNEL(IPSP.SIMU) CHLTYPE(SDR) LOCLADDR(168.33.130.188) DISCINT(0) conname('168.33.51.242(1418)') XMITQ(IPSPtoSIMU) TRPTYPE(TCP) REPLACE" | runmqsc QMIPSP
echo "START CHANNEL(IPSP.SIMU) " | runmqsc QMIPSP
168.33.51.242——定义通道和本地队列
echo "DEFINE CHANNEL(IPSP.SIMU) CHLTYPE(RCVR) TRPTYPE(TCP)" | runmqsc QMSIMU echo "DEFINE QLOCAL(SIMU_1) DEFPSIST(YES) MAXDEPTH(500000) MAXMSGL(1048576) DEFPRTY(9)" | runmqsc QMSIMU
定义通道时候,其中的传输队列有什么意义,188服务器中出现两个传输队列指向一个通道的情况,怎么解释?

2 总结
2.1 消息跟踪
根据各个对象中的属性,可以跟踪消息的传递过程,进而判断mq的设置是否正确:(精华)
远程队列——qr
可以查看远端队列管理器 和队列名字
查看本地传输队列XMITQ(SIMUtoIPSP)
传输队列——ql
可以查看传输通道TRIGDATA(BANK.IPSP)
传输通道——chs
查看本地ip LOCLADDR(168.33.51.242)
查看通道类型 CHLTYPE(SDR) CHLTYPE(RCVR)
远端服务器地址 端口conname
通道另一端的队列管理器 RQMNAME
查看传输队列XMITQ(SIMUtoIPSP)
IBM MQ 队列属性:http://www.ibm.com/support/knowledgecenter/zh/SSFKSJ_8.0.0/com.ibm.mq.explorer.doc/e_properties_queues.htm
2.2 常用命令
--查看队列状态--
dspmq --查看通道--
dis chs(*)
--查看队列深度--
display ql(Q_SVC2ADP_4_HTTP) curdepth
--清除队列消息--
clear ql(Q_SVC2ADP_4_HTTP)
--查看CCSID--
display qmgr all
--修改CCSID--
ALTER QMGR [FORCE] CCSID(5488)
发送通道和接收通道的状态不是running?
首先说明,如果长时间没有消息传输,通道的状态会变成不活动状态,这是正常现象。
如果你手动启动通道后,通道状态还不是running,那先查看错误日志(两边的队列管理器都要查看)
/var/mqm/qmgrs/QM1/errors中的错误日志,通常编号01的日志是最新日志。
常见情况是网络不通导致的通道不通!所以首先要保证网络是正常的,我们可以同过telnet对方的IP加监听端口的方法来查看是不是正常。
telnet 192.168.0.2 1415
再有的情况是两边的配置属性有问题,如两边发送和接收通道名不一致,发送通道的连接名配置错误,发送通道中的传输队列配置错误。
我们也可以执行mq中的一个命令来查看通道是不是正常
runmqsc QM1
ping chl(QM1.QM2)
ping操作来查看两边的通道是不是正常,如果正常会返回ping完成。
2.3 查看mq主机的配置信息

从运维那里可以拿到mq的主机和队列管理器的名字。prot ccsid channel这些可以到机器上面去查看:
查看通道:
目前我采用dis chs(*)命令,本地通道一般都不需要到 . 来分割的。不知道理解对不对

查看ssid:
runmqsc MQ名
dis QMGR
显示全信息 其中就有CCSID

查看端口:
确定监听器
display lsstatus(*)
查看监听器上的端口
display listener(QMTWSV2FUNC)

3 问题总结
3.1 2059问题

start LISTENER(SYSTEM.DEFAULT.LISTENER.TCP)
tws项目中出现2059错误,但不是用上述方法解决的。记录如下:
- 首先查看队列:dspmq

- 进入队列管理器:runmqsc QMTWSV2FUNC

- 然后查看监听:display listener(*)

这里可以用另一个命令进行排除:
列出队列管理器的侦听状态:display lsstatus(*)

- 最后启动监听器即可start listener(QMTWSV2FUNC)

ps:对于如何确定通道的监听器目前并不是很清楚!
正常情况下。是能够telnet 远程主机和端口的,如果不能够,就按照上面的方法,重启mq的监听
telnet IP 端口
3.2 2035问题
mq报“2035”错误
MQRC_NOT_AUTHORIZED
在mq命令行执行如下命令
dis qmgr chlauth
alter QMGR CHLAUTH(DISABLED)
3.3 channel status not found
- 通道处于关闭状态
1.根据批量队列BATBANK_1追踪下去找不到通道

2.此时先执行
#查看是否已经建立此通道
dis chl(*)
如果已经建立通道。只需要执行
start chl(SIMU.GWFLA)
可以看到存在未启动的通道,启动即可!

这里我发现在179服务器上启动后,在182服务骑上就可以看到启动的通道了!
3.4 队列管理器异常结束
一台mq服务器,因为重启了电脑,结果显示

解决方案,启动队列管理器:
strmqm QMTWS

3.5 2058问题
启动程序,报2058错误。
-- ::28.096:WARN::Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'r61200201Dispatcher': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private szfs.tws.biz.service.pay.TotalCheckService szfs.tws.biz.dispatcher.R61200201Dispatcher.totalCheck; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'totalCheckService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private szfs.tws.core.mq.MqSendService szfs.tws.biz.service.pay.TotalCheckService.sender; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mqSendService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: szfs.tws.core.mq.core.BaseSendMQService szfs.tws.core.mq.MqSendServiceImpl.singleSend; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sendSingleMQService' defined in file [G:\STSPro\partition-work\tws_ws\build\classes\spring-mq.xml]: Invocation of init method failed; nested exception is szfs.tws.core.mq.TwsMQException: 初始化队列管理器出错(主机:168.11.206.67,管理器:QMTWSV2FUNC,通道:TWSCONN,端口:).:
com.ibm.mq.MQException: Completion Code , Reason
at com.ibm.mq.MQQueueManager.<init>(MQQueueManager.java:)
at szfs.tws.core.mq.core.AbstractMQService.init(AbstractMQService.java:)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:)
at java.lang.reflect.Method.invoke(Method.java:)
出现mq问题,首先确定自己配置的队列管理器是否正确,然后到mq服务器上去查看该mq队列是否启动。

这里出现问题,是因为配错了队列管理器。
1
MQ通道搭建以及连通性检查的更多相关文章
- MQ通道配置
转自:http://www.cnblogs.com/me115/p/3471788.html MQ通道配置 通道是用来连接两个队列管理器的: 在单个队列管理器内读写消息不需要建立通道:但在一个队列管理 ...
- IBM WebSphere MQ 通道类型配置
IBM WebSphere MQ 通道类型配置 初学MQ,四种常见通道,windows下操作 目录 Sender--Receiver Server-Receiver Server-Requester ...
- 一个网络设备的常见功能--连通性检查SSRF漏洞--被黑客利用当做扫描器
一.我们先来看一下很多网络设备都有的一个常见功能--连通性测试: 很多网络设备都具备与其他设备通信,联动的功能,例如网络设备联动安全设备,网络设备联动认证设备等等.此时都需要一个对端IP和对端端口号作 ...
- Shell脚本实现网络连通性检查Ping+Telnet
转至:https://blog.csdn.net/AngelLBS/article/details/89382136 #!/bin/sh ############################### ...
- (转)IBM MQ 创建以及常见问题集锦
背景:这篇文章还是很全面的,但是很杂乱 后面慢慢整理吧! 1 MQ 消息队列+发送队列+消息通道 接收通道名称与发送端的发送通道名称要一致,修改通道信息后要执行 start channle(chlna ...
- IBM MQ 创建以及常见问题集锦
消息队列+发送队列+消息通道 接收通道名称与发送端的发送通道名称要一致,修改通道信息后要执行 start channle(chlname) 重启通道.常用的MQ命令 66.0.42.240 用户 mq ...
- (转载)MQ基本操作
摘自:http://blog.sina.com.cn/s/blog_4892cf780100erga.html 一.MQ基本操作 MQ中有几个很重要的组件:队列管理器(QueueManager).队列 ...
- IBM MQ 使用指南
一.MQ基本操作 MQ中有几个很重要的组件:队列管理器(QueueManager).队列(Queue)和通道(Channel).其基本的操作方法如下: 1)创建队列管理器 crtmqm –q QMg ...
- MQ队列堵塞无法读取经验总结
问题现象: 1号发生本地来帐队列无法读取消息的问题,导致来帐报文均无法正常处理. 原因分析: 应用系统没有修改或上包,昨天交易和消息读取还是一切正常,mbfe的状态也是正常,mq的状态正常,以上正常可 ...
随机推荐
- JSP手动注入 全
检测可否注入 http://****.house.sina.com.cn/publics/detail.jsp?id=7674 and 1=1 (正常页面) http://****.house.sin ...
- [Open Source] 负载均衡之Nginx
目录 简介 常用命令 功能 代理 反向代理 集群 HTTP集群 TCP集群 重定向 静态文件 HTTPS配置 常见问题 简介 Nginx ("engine x") 是一款轻量级,高 ...
- mac os 安装 wget
1. brew安装: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/inst ...
- Winform中Chart图表的简单使用
在常见的一些数据采集的系统中, 都少不了一个就是, 数据分析, 无论是报表的形式, 还是图形的形式. 他都是可以迅速的展现一个数据趋势的实现方法, 而今天, 就是简单介绍一下, 微软的工具库自带的 C ...
- UE4 Run On owing Client解析(RPC测试)
今天看到文档中游戏性指南->远程调用函数->在蓝图中使用远程调用函数的 Run On Owning Client 在所有权的客户端上运行部分,发现把Add Item和Remove Item ...
- phpcmsV9手机站内容页有时内容不显示
phpcmsV9手机站内容页有时内容不显示,修改的办法是: 在文件phpcms\modules\wap\index.php 中 屏蔽第119行,即如下内容 //$content = $contentp ...
- celery_01 _celery安装启动
简介:celery是一个分布式队列的管理工具,提供了快速管理和操作分布式任务队列的一些方法的框架 特点:1.celery易于使用和维护,不需要进行很复杂的配置,简单的celery例子: from ce ...
- 处理浏览器兼容 各个浏览器的标识 hack
Firefox 浏览器 @-moz-document url-prefix() { .selector { property: value; } } 支持所有Gecko内核的浏览器 (包括Firefo ...
- React文档翻译 (快速入门)
翻译自react的大部分文档,方便自己查阅. 目录 生命周期 实例化 存在期 销毁期 state Do Not Modify State Directly State Updates May Be A ...
- NPOI 生成 excel基本设置
//设置页眉页脚 tempSheet.Header.Center = "2017-04-27"; tempSheet.Footer.Center = "√" + ...