0

我最近继承了一个测试框架,使用 PYMQI 将消息放在 IBM Websphere Queue 上。我通过这个链接修复了我需要的大部分代码

https://dsuch.github.io/pymqi/examples.html#how-to-correlate-request-and-response-messages-using-correlationid

唯一悬而未决的问题是相关 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 发布的,该应用程序具有下游系统预期的相关性。 第二条消息是使用 pymqi 发布的——它的相关 ID 显示 ID:'hex 格式'。 还有 JMSDestination 显示为空。

在上面的屏幕截图中,队列中的第一条消息是使用应用程序 JMSToolBox 发布的,该应用程序具有下游系统所期望的相关 ID。第二条消息是使用机器人框架/pymqi 发布的 - 其相关 ID 显示为 ID:30303 ..... 另请注意,第二条消息的 JMSDestination 显示为空。(对于手动发布的第一条消息,作为 'JMSDestination: queue:///QueueName'

现在我有两个问题 - CorrelationId 没有像我预期的那样出现,JMSDestination:null。我不确定如何使用 pymqi 库设置目标(或者这是在 Q-Manager 级别设置的)任何帮助都非常感谢。

JMSToolBox 发送消息截图: 在此处输入图像描述

使用robotframework-pymqi发送的消息截图: 在此处输入图像描述

我现在在两条消息中发现的唯一区别是 JMSHeader 中的 JMSDestination:Null 用于使用 Pymqi 发送的消息。我还尝试更改队列的 PROPCTL 设置,但没有帮助。

有没有我可以使用 pymqi 发送 java 属性?

4

1 回答 1

1

正如注释所示,相关 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. 我不能告诉你代码在哪里,因为你没有展示那一点,但是pymqi文档中有示例。

于 2020-05-29T09:17:40.380 回答