【问题标题】:How to connect to local MQseries queue using Python?如何使用 Python 连接到本地 MQSeries 队列?
【发布时间】:2020-01-31 22:46:16
【问题描述】:

我是 mqseries 的新手,我从 IBM WebSphere MQ curses 开始。有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 本地队列。

我的代码有什么问题?

【问题讨论】:

    标签: python ibm-mq pymqi


    【解决方案1】:

    根据错误,您似乎正在尝试连接到远程队列管理器,但您正在使用本地队列管理器绑定方法进行连接。我这样说是因为错误表明 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)
    

    【讨论】:

    • 我想使用本地队列。 AFAIK 没有渠道。频道出现在关于在客户端-服务器配置中发送消息的课程中(我也有这节课的问题)。我完成了关于使用本地和远程队列发送消息的课程,并希望通过代码来完成。
    • 正如 T.Rob 所说,您似乎正在使用在客户端模式下构建的 pymqi 模块。如果要使用绑定连接(本地队列管理器,无通道),则需要使用在服务器模式下构建的 pymqi 模块。查看此链接:packages.python.org/pymqi/index.html#download-build-install 否则,您始终可以在本地队列管理器上创建一个通道并使用上面的 connectTCPClient 方法。
    • 我创建了receiver 类型的频道,但我无法激活它。我应该创建什么类型的频道?
    • 我创建了connection with server 类型的频道,并且能够向它发送消息!谢谢。
    【解决方案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

    【讨论】:

    • 你是对的。我使用了客户端绑定,而只有这种类型的模块以预编译的形式提供。在我发现MQSample.java 的示例中,它似乎有效。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 2015-02-09
    • 1970-01-01
    相关资源
    最近更新 更多