【问题标题】:Python pymqi : How to specify the message format for putting to a queuePython pymqi:如何指定放入队列的消息格式
【发布时间】:2020-01-31 22:56:51
【问题描述】:

我正在尝试使用pymqi将字符串消息放入MQ中,代码如下;

import xml.dom.minidom as minidom
import pymqi

class PutMQ:
    def put_mq(args1):
        doc = minidom.parse(args1)                       
        queue_manager = "NameQueueManager"
        channel = "ChannelName"
        host = "HostName"
        port = "PortNumber"
        conn_info = "%s(%s)" % (host, port)

        qmgr = pymqi.QueueManager(None)

        qmgr.connectTCPClient(queue_manager, pymqi.cd(), channel, conn_info)

        putq = pymqi.Queue(qmgr, 'QueueName')


        putq.put(doc.toprettyxml())

        putq.close()
        qmgr.disconnect()
    put_mq('C://MQ//myMessage.xml')

当我运行这段代码时,它不会抛出任何错误。因此,我感觉消息已成功放入所需的队列中。

但是,在将上述消息发送到队列后,我希望在我的一个应用程序屏幕中看到一条记录,但这并没有发生。

如果我通过 AppWatch(网络界面)发送相同的消息,它会起作用,并且我也会在应用程序 UI 上看到预期的记录。

在 AppWatch(Web 界面)上,当我执行“Put Message”时,我提到消息类型为:“String Format (MQFMT_STRING)”。

如何在我的代码中指定消息格式为“MQFMT_STRING”?

感谢您对此的帮助。

【问题讨论】:

    标签: python ibm-mq pymqi


    【解决方案1】:

    根据PyMQI Docs,这是看跌期权的定义:

    put(msg[, mDesc, putOpts])

    将字符串缓冲区“msg”放入队列。如果队列尚未打开,则现在使用“MQOO_OUTPUT”选项打开它。

    mDesc 是消息的 pymqi.md() MQMD 消息描述符。如果未通过,或者为 None,则使用默认的 md() 对象。

    putOpts 是用于 put 调用的 pymqi.pmo() MQPMO Put Message Options 结构。如果未通过,或者为 None,则使用默认的 pmo() 对象。

    如果提供了 mDesc 和/或 putOpts 参数,它们可能会被 put 操作更新。

    因此,为了设置格式,您需要提供 MQMD 消息描述符,即 put 调用中的 mDesc 参数。

    我自己没有尝试过,但您的代码应该类似于:

    md = pymqi.MD()
    md.Format = CMQC.MQFMT_STRING
    putq.put(doc.toprettyxml(), md, None)
    

    【讨论】:

    • 很高兴听到它现在对您有用。如果您认为它解决了您的问题,请记住接受答案(通过单击勾号)。
    猜你喜欢
    • 2013-10-24
    • 1970-01-01
    • 2021-09-10
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 2023-02-04
    相关资源
    最近更新 更多