Как подключиться к локальной очереди MQseries с помощью Python?

Я новичок в 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 локальной очередью.

Что не так с моим кодом?


person Michał Niklas    schedule 29.03.2010    source источник


Ответы (2)


Судя по ошибке, вы пытаетесь подключиться к удаленному администратору очередей, но используете для подключения метод привязки локального администратора очередей. Я говорю это, потому что ошибка гласит, что клиент 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)
person gregwhitaker    schedule 29.03.2010
comment
Я хочу использовать локальную очередь. AFAIK нет канала. Канал появляется на уроке по отправке сообщения в конфигурации клиент-сервер (у меня тоже проблемы с этим уроком). Я закончил урок по отправке сообщений с использованием локальных и удаленных очередей и хотел сделать это из кода. - person Michał Niklas; 31.03.2010
comment
Как сказал T.Rob, похоже, вы используете модуль pymqi, встроенный в клиентский режим. Если вы хотите использовать соединение с привязками (локальный диспетчер очередей, без канала), вам нужно использовать модуль pymqi, созданный в режиме сервера. Перейдите по этой ссылке: packages.python.org/pymqi/index.html. #download-build-install В противном случае вы всегда можете просто создать канал в локальном диспетчере очередей и использовать метод connectTCPClient, как описано выше. - person gregwhitaker; 31.03.2010
comment
Я создал канал типа receiver, но не могу его активировать. Какой тип канала мне создать? - person Michał Niklas; 01.04.2010
comment
Я создал канал типа connection with server и смог отправить на него сообщение! Спасибо. - person Michał Niklas; 01.04.2010

В вашем сообщении упоминается, что вы хотите, чтобы это работало на 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 API Java и JMS WMQ находится здесь: 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

-- Т.Роб

person T.Rob    schedule 30.03.2010
comment
Ты прав. Я использовал клиентские привязки, в то время как в прекомпилированном виде доступен только такой тип модуля. В образцах я нашел MQSample.java, и это, кажется, работает. Спасибо. - person Michał Niklas; 01.04.2010