链接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的问题说明相关推荐

  1. 远程连接IBM MQ报错AMQ4036解决方法

    首先,我是在linux服务器上部署的MQ,以及使用指令新建的独立管理器QM001,然后使用本机的IBM MQ客户端远程连接,队列管理器名称,IP,端口均正确,发生AMQ4036报错,提示没有权限访问, ...

  2. IBM MQ新建队列管理器时报错AMQ 7077错误

    使用IBM MQ新建队列时,报AMQ 7077 错误: AMQ 7077:你未授权来进行请求的操作的解决方案: 处理方案: 系统和安全>管理工具>计算机管理>本地用户和组>组, ...

  3. java 日期年度 35变2035_连接IBM MQ原因码报2035的错误解决办法

    我们的系统使用了ibm mq,用户用来向国家局上报文件和接收文件,前几天用户说上报一直不成功.由于 开发这块程序的人已经辞职了,我觉定在我的机器部署一套,研究一下.我的思路: 在我的机器上安装mq,建 ...

  4. Linux安装消息队列IBM MQ 7.5开发版安装配置详解

    消息队列IBM MQ 7.5开发版安装配置详解 文章目录 消息队列IBM MQ 7.5开发版安装配置详解 前言 一.什么是IBM MQ? 二.安装前准备 1.安装前准备 2.安装MQ Server 3 ...

  5. SpringBoot整合IBM MQ,多个队列管理器通信

    说明:本项目开发前提是,在本地windows机器上搭建了MQ,并建立好发送队列管理器,本地队列,远程队列,发送通道:在阿里云服务器上也搭建了MQ,建立了接收队列管理器,接收通道.具体步骤见本人之前的博 ...

  6. ibm mq qname java_IBMMQ 从队列获取消息并将消息发送到特定主题上面

    IBMMQ 从队列获取消息并将消息发送到特定主题上面 注:IBMMQ的CCSID:1381 package com; import java.io.EOFException; import java. ...

  7. IBM Webshere MQ 队列配置

    0.队列准备 对端MQ队列管理器:QM_A 本地队列:L_QA 接收通道:C_SendB IP端口:1.1.1.1:15303 山东测试MQ队列管理器:QM_B 本地队列:L_QB 远程队列:R_QB ...

  8. 使用IBM MQ远程连接时报错AMQ 4043解决思路

    我使用IBM MQ客户端远程连接队列管理器时,报错 AMQ 4043,百度基本找不到解决办法,唯一一个解决方法是这个(https://stackoom.com/question/1sroR),但是,按 ...

  9. 超全IBM MQ安装运行与代码连接测试

    前言 选择windows安装测试是有必要的,IBM MQ不同于其他MQ,其运行与创建队列管理器很复杂,在打算部署linux之前,建议先把windows下的可视化操作理清,不至于踩坑! 安装 IBM M ...

最新文章

  1. 英伟达发布史上最强GPU,却叫停了自动驾驶车路测
  2. linux mysql 数据目录迁移后不生效_Linux中更改转移mysql数据库目录的步骤
  3. python 聚类算法包_Python聚类算法之DBSACN实例分析 python怎么用sklearn包进行聚类
  4. 使用jenkins实现监控嵌入式设备稳定性之二----脚本部分
  5. 【jq】c#零基础学习之路(1)Hello World!
  6. 前端学习(1540):案例分析
  7. vc++64位系统下long的长度为4个字节_Java与系统硬件的亲密接触「伪共享」
  8. 什么是OOM?常见有哪些OOM?
  9. 使用webService时,gsoap数据类型注意事项
  10. libevent 接收TCP连接
  11. mysqlbackup 还原特定的表
  12. 在linux系统下安装与配置SVN服务器
  13. 现代通信原理:月考(二)答案
  14. CAD无法打印的问题解决办法
  15. 64位win10系统中无法开启vmware的VT-X嵌套虚拟化功能的解决方法
  16. 中国目前拥有的人造卫星的种类及其作用
  17. creo 6.0—02:单位的设置,默认绘图模板的绘制(重点)
  18. Android persistent机制
  19. Android 拦截音量键并屏蔽系统的音量调节
  20. zz在Excel中作ROC曲线

热门文章

  1. OV7670 的SCCB (I2C)波形记录
  2. R语言 ggplot2 散点图 多组数据 形状,大小,颜色 调整
  3. javascript 日期 新历 农历 生肖 农历节庆 总结
  4. ArchSummit北京2015大会九大看点
  5. pajek02:点、线、方向、数值和增删改操作(创建“全数弧”随机社会网络)
  6. Visdom蓝屏问题解决
  7. 运筹学--运输问题及解法
  8. 文章云计算的兄弟,雾计算要来了
  9. scott被锁住了怎么办
  10. 分治法与蛮力法求最近点对问题(分治法时间复杂度O(nlogn))