Python pymqi:如何指定放入队列的消息格式

时间:2016-06-23 15:11:26

标签: python ibm-mq mq

我正在尝试使用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'时,我将消息类型提及为:"字符串格式(MQFMT_STRING)"。

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

感谢你的帮助。

1 个答案:

答案 0 :(得分:4)

根据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)