2013-06-12 3 views
1

Невозможно отправить сообщение в очередь кластера в удаленном диспетчере очередей. Я использую MQGetMessageOptions и MQPutMessageOptions. Я использую 7.5 MQ сервер и клиент (7.5.0.1)Проблема IBM MQ с кластерной очередью

Это бросает код причины - 2085- сообщение -CompCode: 2, Причина: 2085

Очередь и диспетчер очереди соединены с помощью кластеров MQ.

mqQueue = mqQueueMgr.AccessQueue("queue name", MQC.MQOO_FAIL_IF_QUIESCING | MQC.MQOO_INPUT_SHARED | MQC.MQOO_BROWSE); 

Я попытался поместить тестовое сообщение с помощью amqsput.exe, он отлично работает.

Любые мысли?

ответ

4

Этот вызов:

mqQueue = mqQueueMgr.AccessQueue("queue name", MQC.MQOO_FAIL_IF_QUIESCING | MQC.MQOO_INPUT_SHARED | MQC.MQOO_BROWSE); 

открывает очередь кластера для получения сообщений. Чтобы получать сообщения, приложение должно быть подключено к локальному диспетчеру очереди. Локальный менеджер очередей означает диспетчер очереди, к которому подключено ваше приложение. Менеджер очереди может находиться на той же машине, что и ваше приложение, или на другой машине. Сообщения не могут быть получены из удаленного диспетчера очереди. Сообщения могут быть помещены в очередь кластера, когда приложение подключено к другому менеджеру очередей в кластере, чем менеджер очереди, в котором размещается очередь кластера.

AMQSPUT работает, потому что он открывает очередь для Put, а не для Get.

Итак, чтобы решить вашу проблему опция должна быть изменена:

mqQueue = mqQueueMgr.AccessQueue("queue name", MQC.MQOO_FAIL_IF_QUIESCING | MQC.MQOO_OUTPUT); 
+0

Спасибо, я могу добавить MQC.MQOO_OUTPUT в конце как показано ниже, вместо удаления других записей (чтобы это работало как для локальных, так и для кластерных очередей)? mqQueue = mqQueueMgr.AccessQueue («имя очереди», MQC.MQOO_FAIL_IF_QUIESCING | MQC.MQOO_INPUT_SHARED | MQC.MQOO_BROWSE | MQC.MQOO_OUTPUT); – Sharpeye500

+0

Нет. Это все равно сбой, если вы добавите MQC.MQOO_OUTPUT. Вам нужно удалить опции INPUT_SHARED и BROWSE. Чтобы получать сообщения из очереди кластеров, приложение должно быть подключено к диспетчеру очереди, где размещена очередь кластера. – Shashi

+0

Спасибо, будет ли это работать для локальных и кластеризованных очередей? – Sharpeye500

0

Попробуйте

MQQueue queue = queueManageArg.AccessQueue(queueNameArg, 
       MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING); 

положить сообщение MQ