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

6 投票
2 回答
15872 浏览
提问于 2025-04-15 20:58

我刚接触mqseries,开始使用IBM WebSphere MQ的界面。里面有一些例子,比如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的本地队列。

我的代码哪里出错了呢?

2 个回答

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

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)

撰写回答