如何使用Python连接本地MQseries队列?
我刚接触mqseries,开始使用IBM WebSphere MQ的界面。里面有一些例子,比如MQ_APPLE
和MQ_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 个回答
你的帖子提到你想用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.htmlIBM的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
根据这个错误信息,看起来你是在尝试连接一个远程的队列管理器,但你却用的是本地队列管理器的连接方式。我这么说是因为错误提示说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)