您希望获得特定队列管理器的队列列表。我似乎知道如何做到这一点,但当我尝试,我得到一个错误。
文件“D:/
/Work-/queue list.py",第23行,响应= pcf.MQCMD_INQUIRE_Q(args)文件第2769行,在 call message =self._pcf.reply_queue.get(无,get_md )中文件"C:\Users\ShevcovAA\AppData\Local\Programs\Python\Python37\lib\site-packages\pymqi_init.py",第2021行,在get raise (rv-2,rv-1,message=rv,原始长度=rv-3) pymqi.MQMIError: MQI错误.Comp: 2,原因2033:失败: MQRC_NO_MSG_AVAILABLE
我的守则:
import logging
import re
import pymqi
logging.basicConfig(level=logging.INFO)
queue_manager = 'QM1'
channel = 'DEV.APP.SVRCONN'
host = '127.0.0.1'
port = '1414'
conn_info = '%s(%s)' % (host, port)
prefix = "*"
queue_type = pymqi.CMQC.MQQT_LOCAL
args = {pymqi.CMQC.MQCA_Q_NAME: prefix,
pymqi.CMQC.MQIA_Q_TYPE: queue_type}
qmgr = pymqi.connect(queue_manager, channel, conn_info)
pcf = pymqi.PCFExecute(qmgr)
response = pcf.MQCMD_INQUIRE_Q(args)
for queue_info in response:
queue_name = queue_info[pymqi.CMQC.MQCA_Q_NAME]
if (re.match('^SYSTEM', queue_name) or re.match('^AMQ', queue_name) or re.match('^MQ', queue_name)):
pass
else:
q = pymqi.Queue(qmgr, queue_name)
print(queue_name.strip() + ':' + 'Queue depth:', q.inquire(pymqi.CMQC.MQIA_CURRENT_Q_DEPTH))
q.close()
qmgr.disconnect()发布于 2021-04-25 09:01:48
v1.12.0 pymqi使用不同的逻辑从响应队列中获取PCF响应消息。
默认情况下,超时5秒用于等待响应。因此,如果您有很多队列,或者QM负载很重,这可能是不够的。
要解决这个问题,可以使用response_wait_interval构造函数的PCFExecute参数来增加这个间隔。
pcf = pymqi.PCFExecute(qmgr, response_wait_interval=30000) # 30 secondsv1.11.0没有此参数,并使用30秒的默认间隔。
避免查询每个队列的深度,只需查询MQIA_CURRENT_Q_DEPTH属性。
在v1.12+支持的新表示法中,它将类似于:
attrs = [] # type: List[pymqi.MQOpts]
attrs.append(pymqi.CFST(Parameter=pymqi.CMQC.MQCA_Q_NAME,
String=pymqi.ensure_bytes(prefix)))
attrs.append(pymqi.CFIN(Parameter=pymqi.CMQC.MQIA_Q_TYPE,
Value=queue_type))
attrs.append(pymqi.CFIL(Parameter=pymqi.CMQCFC.MQIACF_Q_ATTRS,
Values=[pymqi.CMQC.MQIA_CURRENT_Q_DEPTH]))
object_filters = []
# object_filters.append(
# pymqi.CFIF(Parameter=pymqi.CMQC.MQIA_CURRENT_Q_DEPTH,
# Operator=pymqi.CMQCFC.MQCFOP_GREATER,
# FilterValue=0))
response = pcf.MQCMD_INQUIRE_Q(attrs, object_filters)
for queue_info in response:
queue_name = queue_info[pymqi.CMQC.MQCA_Q_NAME]
queue_depth = queue_info[pymqi.CMQC.MQIA_CURRENT_Q_DEPTH]
print('{}: {} message(s)'.format(queue_name.strip().decode(), queue_depth))发布于 2021-03-23 10:03:55
通过简单地安装下面的版本解决了这个错误。也就是说,Meln有PyMQi 1.12.0,现在是PyMQI 1.11.0
我的守则:
import pymqi
import date_conn
qmgr = pymqi.connect(date_conn.queue_manager, date_conn.channel, date_conn.conn_info)
pcf = pymqi.PCFExecute(qmgr)
c = 0
attrs = {
pymqi.CMQC.MQCA_Q_NAME :'*'
}
result = pcf.MQCMD_INQUIRE_Q(attrs)
for queue_info in result:
queue_name = queue_info[pymqi.CMQC.MQCA_Q_NAME]
print(queue_name)
c+=1
print(c)
qmgr.disconnect()https://stackoverflow.com/questions/66742537
复制相似问题