使用PYMQI和相关ID的IBM消息队列

2024-09-29 17:09:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

唯一悬而未决的问题是相关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)

当我将消息发送到队列时,消息已成功发布,但未被下游系统处理:

In the screenshot below the first message in the queue was posted using app JMSToolBox- which has the correlation as expected by the downstream system. The second message was posted using pymqi - which has the correlation-id displayed ID:'hex format'. Also there is JMSDestination displayed as null.

在上面的屏幕截图中,队列中的第一条消息是使用app JMSToolBox发布的,它具有下游系统所期望的correlationId。第二条消息是使用robot framework/pymqi发布的,它的相关id显示为id:30303。。。。。另外请注意,对于第二条消息,JMSDestination显示为null。(对于手动发布的第一条消息,JMSDestination为:queue:///QueueName"

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

JMSToolBox发送的消息的屏幕截图: enter image description here

使用robotframework pymqi发送的消息的屏幕截图: enter image description here

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

是否有一个可以使用pymqi发送java属性的方法


Tags: 代码id消息字节屏幕队列queueput
1条回答
网友
1楼 · 发布于 2024-09-29 17:09:54

如注释所示,相关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文档中有一些示例

相关问题 更多 >

    热门问题