我具有以下环境:
我有一个模块,该模块从IBM MQ读取消息,然后对其进行处理。 方案如下:
- 启动应用程序
- 通过发出ifdown eth0命令,与IBM MQ所在的VM的模拟连接丢失
- 按预期的方式断开连接
预期行为:
- 正在引发pymqi.MQMIError
观察到的行为:
- 所有pymqi呼叫都被阻止。除非使用ifup再次启用连接,否则正在运行的线程将不执行任何操作。
这是代码的一部分:
def connect_and_subscribe(self):
"""Connect to IBM MQ and subscribe"""
self.qmgr = pymqi.connect(self.qmgr_name, self.qmgr_channel, self.qmgr_connect)
self.queue = pymqi.Queue(self.qmgr, self.queue_name)
self.queue_i = pymqi.Queue(self.qmgr, self.queue_name)
self.queue_i_type = self.queue_i.inquire(pymqi.CMQC.MQIA_Q_TYPE)
self.connected = True
logging.info('CONNECTED TO MQ USING PYMQI VERSION <%s>' % (pymqi.__version__))
return
#--------------------------------------------------------------------
m = None
# Message Options
gmo = pymqi.GMO()
gmo.Options = pymqi.CMQC.MQGMO_WAIT | pymqi.CMQC.MQGMO_FAIL_IF_QUIESCING | pymqi.CMQC.MQPMO_SYNCPOINT
gmo.WaitInterval = self.max_cycle_wait_secs * 1000
while True:
try:
m = None
md = pymqi.MD()
m = self.queue.get(None, md, gmo)
self.queue.commit()
except pymqi.MQMIError as e:
if e.reason == pymqi.CMQC.MQRC_NO_MSG_AVAILABLE:
.....
有什么想法吗?