Python pymqi命令都被阻止
我有以下环境:Python pymqi命令都被阻止,python,ibm-mq,pymqi,Python,Ibm Mq,Pymqi,我有以下环境: 红帽 Python 2.7 我有一个模块,它从IBM MQ读取消息,然后处理它们。 情况如下: 启动应用程序 通过发出ifdown eth0命令,与IBM MQ所在的VM的模拟连接丢失 正如所料,连接已断开 预期行为: 正在引发pymqi.MQMIError 观察到的行为: 所有pymqi调用都被阻止了。除非使用ifup再次启用连接,否则正在运行的线程不会执行任何操作 这是代码的一部分: def connect_and_subscribe(self): """
- 红帽
- Python 2.7
- 正在引发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:
.....
def connect_和_subscribe(self):
“”“连接到IBM MQ并订阅”“”
self.qmgr=pymqi.connect(self.qmgr\u名称、self.qmgr\u通道、self.qmgr\u connect)
self.queue=pymqi.queue(self.qmgr,self.queue\u名称)
self.queue_i=pymqi.queue(self.qmgr,self.queue_名称)
self.queue_i_type=self.queue_i.inquire(pymqi.CMQC.MQIA_Q_type)
self.connected=True
logging.info('使用PYMQI版本“%”(PYMQI.\uuuu版本)连接到MQ))
返回
#--------------------------------------------------------------------
m=无
#消息选项
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
尽管如此:
尝试:
m=无
md=pymqi.md()
m=self.queue.get(无、md、gmo)
self.queue.commit()
除了pymqi.MQMIError作为e:
如果e.reason==pymqi.CMQC.MQRC\u无可用信息:
.....
有什么想法吗?安装了什么版本的MQ客户端?当它阻塞时,您要等待多长时间才能启动接口?您是否曾经等待超过6分钟?如果不试试,我有pymqi 1.3。我没有尝试等待超过30秒。如果我等待超过6分钟,我将尝试看看会发生什么。谢谢。实际上我想知道IBM MQ客户端的版本。Pymqi需要来自IBM的MQ客户机。为了更快地从您描述的情况中恢复,您需要在客户端和SVRCONN通道上设置较低的HBINT。如果您在客户端和服务器上都使用v7.0.1.0或更高版本的MQ,并且SHRCONV至少为1,则15秒将获得30秒的超时。感谢您的提示。您可以提供MQ客户端版本吗。如果已将其安装在服务器上,则可以在MQ安装位置下的windows bin目录下运行dspmqver(Linux/opt/mqm/bin/dspmqver)。如果您使用的是一个较新的Redist客户端,它将位于您解压缩文件的bin目录中(Linux tar或Windows zip)。现在我在电脑前,我要写一个答案。