链接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指定队列的链接
以此循环,