我最近继承了一个测试框架,使用PYMQI将消息放在ibmwebspherequeue上。我通过这个链接修复了我需要的大部分代码
唯一悬而未决的问题是相关ID的格式。我尝试了很多选项,但MQ在将相关ID转换为字节数组(似乎是IBM MQ的默认设置)之后,才将其放到Q上。我的所有下游系统都在寻找十六进制值,并且正在中断
这件事我已经坚持了好几天了。是否有方法强制在消息属性中使用相关ID
请让我知道
问候 阿拉文德
@JoshMc非常感谢您的回复。它是专有代码,所以粘贴整个内容并不困难,但这里是相关的部分。下游系统正在查看此JMS关联ID以增加并放回队列中。当我通过下面的代码发送此消息时,它将命中队列并转换为字节数组,但下游系统读取验证失败。我希望它作为十六进制值进入队列,因为它应该是我传递的确切值,而不是字节数组
queue = self._open_write_queue(queue_name)
put_mqmd = pymqi.md()
put_mqmd.Format = CMQC.MQFMT_STRING
CCSID = 1202
put_opts = pymqi.pmo()
# Set the MsgType to request.
# put_mqmd["MsgType"] = CMQC.MQMT_REQUEST
put_mqmd["MsgId"] = '00002Y0001T1'
put_mqmd["CorrelId"] = '00002Y0001T1'
put_opts = pymqi.PMO(Options=CMQC.MQPMO_NO_SYNCPOINT +
CMQC.MQPMO_FAIL_IF_QUIESCING + CMQC.MQRO_PASS_CORREL_ID)
queue.put(message, put_mqmd, put_opts)
当我将消息发送到队列时,消息已成功发布,但未被下游系统处理:
在上面的屏幕截图中,队列中的第一条消息是使用app JMSToolBox发布的,它具有下游系统所期望的correlationId。第二条消息是使用robot framework/pymqi发布的,它的相关id显示为id:30303。。。。。另外请注意,对于第二条消息,JMSDestination显示为null。(对于手动发布的第一条消息,JMSDestination为:queue:///QueueName"
现在我有两个问题-CorrelationId没有像我预期的那样出现,JMSDestation:null。我不确定如何使用pymqi库设置目标(或者这个设置是在Q-Manager级别),非常感谢您的帮助
使用robotframework pymqi发送的消息的屏幕截图:
现在,我在这两条消息中发现的唯一区别是,对于使用Pymqi发送的消息,JMSHeader中的JMSDestination:Null。我还尝试更改队列的PROPCTL设置,但没有帮助
是否有一个可以使用pymqi发送java属性的方法
如注释所示,相关id需要是一个填充为24字节或48个十六进制的字节数组。所以
Python 2&;3兼容方式
Python 3唯一的方法
但是最简单的方法是让底层客户机通过传入
CMQC.MQPMO_NEW_CORREL_ID
来为您生成它。我无法告诉您代码中的位置,因为您还没有显示该位,但是pymqi
文档中有一些示例相关问题 更多 >
编程相关推荐