我最近继承了一个测试框架,使用 PYMQI 将消息放在 IBM Websphere Queue 上。我通过这个链接修复了我需要的大部分代码
唯一悬而未决的问题是相关 ID 的格式。我尝试了很多选项,但 MQ 正在将相关 ID 转换为字节数组(似乎是 IBM MQ 默认设置),然后再将其扔到 Q 上。我所有的下游系统都在寻找 HEX 值并且正在中断。
我被困在这几天了。有没有办法在消息属性中强制关联 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)
当我将消息放入队列时,它会成功发布,但不会被下游系统处理:
在上面的屏幕截图中,队列中的第一条消息是使用应用程序 JMSToolBox 发布的,该应用程序具有下游系统所期望的相关 ID。第二条消息是使用机器人框架/pymqi 发布的 - 其相关 ID 显示为 ID:30303 ..... 另请注意,第二条消息的 JMSDestination 显示为空。(对于手动发布的第一条消息,作为 'JMSDestination: queue:///QueueName'
现在我有两个问题 - CorrelationId 没有像我预期的那样出现,JMSDestination:null。我不确定如何使用 pymqi 库设置目标(或者这是在 Q-Manager 级别设置的)任何帮助都非常感谢。
使用robotframework-pymqi发送的消息截图:
我现在在两条消息中发现的唯一区别是 JMSHeader 中的 JMSDestination:Null 用于使用 Pymqi 发送的消息。我还尝试更改队列的 PROPCTL 设置,但没有帮助。
有没有我可以使用 pymqi 发送 java 属性?