如何使用Python连接到本地MQseries队列?

问题描述 投票:5回答:2

我是mqseries的新手,我从IBM WebSphere MQ curses开始。有MQ_APPLEMQ_ORANGE队列管理器的示例。使用MQ Explorer将消息发送到本地或远程队列没有问题,但是我想从代码中发送这样的消息:Python或Java。我用以下代码尝试了Python pymqi库:

import pymqi

qmgr = pymqi.QueueManager(None)
qmgr.connect('QM_APPLE')

putq = pymqi.Queue(qmgr, 'Q1')
putq.put('Hello from Python!')

但我收到错误:

Traceback (most recent call last):
    File "mq_put.py", line 4, in <module>
        qmgr.connect('QM_APPLE')
    File "c:\Python26\lib\site-packages\pymqi.py", line 758, in connect
        raise MQMIError(rv[1], rv[2])
pymqi.MQMIError: MQI Error. Comp: 2, Reason 2540: FAILED: MQRC_UNKNOWN_CHANNEL_NAME

[有QM_APPLE个队列管理器和Q1个本地队列。

我的代码怎么了?

python ibm-mq pymqi
2个回答
3
投票

基于该错误,似乎您正在尝试连接到远程队列管理器,但是您正在使用本地队列管理器绑定方法进行连接。我之所以这样说,是因为错误说明mqi客户端不知道要连接到哪个频道。您能否说明您使用的是本地队列管理器还是远程队列管理器?我粘贴了以下代码以使用通道连接到远程队列管理器。

import pymqi

queue_manager = "QUEUE_MANAGER_NAME"
channel = "SVRCONN.1"
host = "host.domain.com"
port = "1434"
conn_info = "%s(%s)" % (host, port)

qmgr = pymqi.QueueManager(None)
qmgr.connectTCPClient(queue_manager, pymqi.cd(), channel, conn_info)

2
投票

您的帖子中提到您希望此代码以Python或Java运行。我帮不上Python,但是以前的响应者做了,太酷了。就Java而言,也许我可以为您指明正确的方向。 IBM同时支持Java和JMS,并分别提供了许多示例程序。默认情况下,它们安装在:>

C:\ Program Files \ IBM \ WebSphere MQ \ tools \ wmqjava

C:\ Program Files \ IBM \ WebSphere MQ \ tools \ jms

我还在这里提供了自己的示例代码:http://www.ibm.com/developerworks/websphere/techjournal/0610_woolf/0610_woolf.html

IBM的Java和JMS WMQ API实现的文档在这里:http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzaw.doc/uj10120_.htm

我在Python模块上找到的文档似乎表明它必须链接到客户端或服务器WMQ库,并且您的错误似乎表明您已链接了客户端绑定。在这种情况下,您必须提供连接信息,如前所述。 Java和JMS代码支持这两种连接类型,因此无需进行链接,但您仍必须提供正确的连接详细信息。特别是,请阅读有关连接差异的章节:http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzaw.doc/ja11010_.htm

-T.Rob

© www.soinside.com 2019 - 2024. All rights reserved.