我最近继承了一个测试框架,使用PYMQI将消息放到IBM Websphere队列中。我通过这个链接修复了我需要的大部分代码
唯一悬而未决的问题是相关性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:30303.....还请注意,对于第二条消息,队列显示为null。(对于手动发布的第一条消息,队列名显示为' JMSDestination : JMSDestination:/QueueName‘
现在我有两个问题- CorrelationId没有像我预期的那样出现和JMSDestination:空。我不确定如何使用pymqi库设置目的地(或者这是在Q-Manager级别设置),任何帮助都是非常感谢的。
JMSToolBox发送的消息截图:

使用robotframework-pymqi发送的消息截图:

现在我在这两个消息中发现的唯一区别是使用Pymqi发送的消息的JMSHeader中的JMSDestination:Null。我还尝试更改队列的PROPCTL设置-但没有帮助。
有没有可以使用pymqi发送java属性的方法?
发布于 2020-05-29 17:17:40
如注释所示,相关性id需要是一个填充为24字节或48个十六进制的字节数组。所以
Python 2&3兼容方式
put_mqmd["CorrelId"] = 'Aravind'.ljust(24).encode('utf-8')Python 3唯一方法
put_mqmd["CorrelId"] = bytes('Aravind'.ljust(24), 'utf-8')但最简单的方法是让底层客户端通过传入CMQC.MQPMO_NEW_CORREL_ID来生成它。
https://stackoverflow.com/questions/62077839
复制相似问题