链接IBM MQ队列报MQRC_ALREADY_CONNECTED的问题说明
链接IBM MQ队列报MQRC_ALREADY_CONNECTED的问题说明
因项目使用到IBM MQ与其他服务器交换数据,在测试过程中,发现一直存在队列报错问题,大致报错内容如下:
Traceback (most recent call last):
MQError: MQRC_ALREADY_CONNECTED
后在多人帮助下发现,可能由于在于MQ交互过程的逻辑使得此问题的出现:
- 交互逻辑中,所使用到的是tornado框架下的ioloop定时器,已每20秒异步触发一次函数的方式去链接一次MQ:
if __name__ == "__main__":init_log()app = make_app()app.listen(9900, "127.0.0.1")tornado.ioloop.PeriodicCallback(doTask, 1000 * 20).start()tornado.ioloop.PeriodicCallback(doCompress, 1000 * 60 * 60 * 2).start()tornado.ioloop.IOLoop.current().start()
- 链接MQ的逻辑为:
根据交互创建与MQ指定队列的链接 ----> 将消息从MQ取出/把消息放到MQ队列中 ----> 断开与MQ的链接 ----> 开启下一个交互 ----> 根据交互创建与MQ指定队列的链接
以此循环,直至本次所有的交互全部结束;
原先使用的链接的代码源自pymqi使用手册中,内容如下:
import pymqiqueue_manager = 'QM1'
channel = 'DEV.APP.SVRCONN'
host = '127.0.0.1'
port = '1414'
queue_name = 'TEST.1'
message = 'Hello from Python!'
conn_info = '%s(%s)' % (host, port)qmgr = pymqi.QueueManager(None)
qmgr.connect_tcp_client(queue_manager, pymqi.CD(), channel, conn_info)
try:qmgr.connect_tcp_client(queue_manager, pymqi.CD(), channel, conn_info)
except pymqi.MQMIError as e:if e.comp == pymqi.CMQC.MQCC_WARNING and e.reason == pymqi.CMQC.MQRC_ALREADY_CONNECTED:# Move along, nothing to see here..pass
queue = pymqi.Queue(qmgr, queue_name)
queue.put(message)
queue.close()
qmgr.disconnect()
[上述代码源于pymqi手册,链接如下](https://dsuch.github.io/pymqi/examples.html#how-to-avoid-mqrc-already-connected)
- 故,在第一次链接时,可能由于MQ中并无消息,这将导致链接后,反馈的MQ队列无消息错误:
Traceback (most recent call last):
pymqi。MQMIError:MQI Error,Comp:2,Reason 2033:MQRC_NO_AVAILABLE
- 此导致,链接过程的最后两步(断开队列,断开链接)并未执行,而直接跳转到下次链接过程
此处,在多人的帮助下,将手册中的代码改动后,目前验证情况下,并未再次发生链接时报错,MQ已经链接问题,具体改动内容看代码:
def connect():recv_mq = {"ip": "10.232.129.54","port": "1416","username": "mqm","password": "mqm","recv_queue_manager": "VMFSMESMQTEST1","recv_channel": "CLI.PD.MES.MEB.1"}host = recv_mq["ip"] + "(" + recv_mq["port"] + ")"global qmgrqmgr = pymqi.QueueManager(None)# qmgr.connect_tcp_client(recv_mq["recv_queue_manager"], pymqi.CD(), recv_mq["recv_channel"], host,# recv_mq["username"], recv_mq["password"])try:qmgr.connect_tcp_client(recv_mq["recv_queue_manager"], pymqi.CD(), recv_mq["recv_channel"], host,recv_mq["username"], recv_mq["password"])except pymqi.MQMIError as e:print("Connect to MQ Error:",e)if e.comp == pymqi.CMQC.MQCC_WARNING and e.reason == pymqi.CMQC.MQRC_ALREADY_CONNECTED:passdef connectmq_put(recv_mq, str1):queue = pymqi.Queue(qmgr, recv_mq["recv_queue"])queue.put(str1)queue.close()#qmgr.disconnect()def connectmq_get(recv_mq):queue = pymqi.Queue(qmgr, recv_mq["recv_queue"])str1 = queue.get()queue.close()#qmgr.disconnect()return str1
将完整的循环逻辑拆分,定时器触发异步执行时,直接链接MQ服务器,并将链接引为全局,每次与MQ交互只链接队列,执行connectmq_put
或者connectmq_get
即可,待本次异步过程结束,使用先前声明的全局变量将链接断开即可:
qmgr.disconnect()
学习不易,身在其中,深有感悟!希望可以帮到大家
链接IBM MQ队列报MQRC_ALREADY_CONNECTED的问题说明相关推荐
- 远程连接IBM MQ报错AMQ4036解决方法
首先,我是在linux服务器上部署的MQ,以及使用指令新建的独立管理器QM001,然后使用本机的IBM MQ客户端远程连接,队列管理器名称,IP,端口均正确,发生AMQ4036报错,提示没有权限访问, ...
- IBM MQ新建队列管理器时报错AMQ 7077错误
使用IBM MQ新建队列时,报AMQ 7077 错误: AMQ 7077:你未授权来进行请求的操作的解决方案: 处理方案: 系统和安全>管理工具>计算机管理>本地用户和组>组, ...
- java 日期年度 35变2035_连接IBM MQ原因码报2035的错误解决办法
我们的系统使用了ibm mq,用户用来向国家局上报文件和接收文件,前几天用户说上报一直不成功.由于 开发这块程序的人已经辞职了,我觉定在我的机器部署一套,研究一下.我的思路: 在我的机器上安装mq,建 ...
- Linux安装消息队列IBM MQ 7.5开发版安装配置详解
消息队列IBM MQ 7.5开发版安装配置详解 文章目录 消息队列IBM MQ 7.5开发版安装配置详解 前言 一.什么是IBM MQ? 二.安装前准备 1.安装前准备 2.安装MQ Server 3 ...
- SpringBoot整合IBM MQ,多个队列管理器通信
说明:本项目开发前提是,在本地windows机器上搭建了MQ,并建立好发送队列管理器,本地队列,远程队列,发送通道:在阿里云服务器上也搭建了MQ,建立了接收队列管理器,接收通道.具体步骤见本人之前的博 ...
- ibm mq qname java_IBMMQ 从队列获取消息并将消息发送到特定主题上面
IBMMQ 从队列获取消息并将消息发送到特定主题上面 注:IBMMQ的CCSID:1381 package com; import java.io.EOFException; import java. ...
- IBM Webshere MQ 队列配置
0.队列准备 对端MQ队列管理器:QM_A 本地队列:L_QA 接收通道:C_SendB IP端口:1.1.1.1:15303 山东测试MQ队列管理器:QM_B 本地队列:L_QB 远程队列:R_QB ...
- 使用IBM MQ远程连接时报错AMQ 4043解决思路
我使用IBM MQ客户端远程连接队列管理器时,报错 AMQ 4043,百度基本找不到解决办法,唯一一个解决方法是这个(https://stackoom.com/question/1sroR),但是,按 ...
- 超全IBM MQ安装运行与代码连接测试
前言 选择windows安装测试是有必要的,IBM MQ不同于其他MQ,其运行与创建队列管理器很复杂,在打算部署linux之前,建议先把windows下的可视化操作理清,不至于踩坑! 安装 IBM M ...
最新文章
- 英伟达发布史上最强GPU,却叫停了自动驾驶车路测
- linux mysql 数据目录迁移后不生效_Linux中更改转移mysql数据库目录的步骤
- python 聚类算法包_Python聚类算法之DBSACN实例分析 python怎么用sklearn包进行聚类
- 使用jenkins实现监控嵌入式设备稳定性之二----脚本部分
- 【jq】c#零基础学习之路(1)Hello World!
- 前端学习(1540):案例分析
- vc++64位系统下long的长度为4个字节_Java与系统硬件的亲密接触「伪共享」
- 什么是OOM?常见有哪些OOM?
- 使用webService时,gsoap数据类型注意事项
- libevent 接收TCP连接
- mysqlbackup 还原特定的表
- 在linux系统下安装与配置SVN服务器
- 现代通信原理:月考(二)答案
- CAD无法打印的问题解决办法
- 64位win10系统中无法开启vmware的VT-X嵌套虚拟化功能的解决方法
- 中国目前拥有的人造卫星的种类及其作用
- creo 6.0—02:单位的设置,默认绘图模板的绘制(重点)
- Android persistent机制
- Android 拦截音量键并屏蔽系统的音量调节
- zz在Excel中作ROC曲线