My .NET code can connect and put a message to a remote queue successfuly. However, the same code does not work with local queue. It throws 2085 error. What different setting should be set in code to make that work with local queue?
Here is my code:
Hashtable queueProperties = new Hashtable();
queueProperties[MQC.HOST_NAME_PROPERTY] = "10.x.x.x";
queueProperties[MQC.PORT_PROPERTY] = 1451;
queueProperties[MQC.CHANNEL_PROPERTY] = "TST1.TRADE.CHANNEL";
try
{
// Attempt the connection
queueManager = new MQQueueManager("MYQUEUEMANAGER", queueProperties);
strReturn = "Connected Successfully";
}
catch (MQException mexc)
{
// TODO: Setup other exception handling
throw new Exception(mexc.Message
+ " ReasonCode: " + mexc.ReasonCode
+ "n" + GetReason(mexc.ReasonCode), mexc);
}
Here, the code is internally using the IIS user id (application pool user) to connect with MQ because this code is run as part of WCF service.
JoshMc
9,9102 gold badges18 silver badges37 bronze badges
asked Jul 13, 2017 at 12:28
If you run the mqrc
utility you can find out what the error code translates to:
$mqrc 2085
2085 0x00000825 MQRC_UNKNOWN_OBJECT_NAME
This means the queue name you are attempting to open does not exist on the queue manager you are connected to.
I noted that the source you posted does not include any code related to opening the queue. You should check that the queue name you are attempting to open does in fact exist on the queue manager you are connecting to.
answered Jul 13, 2017 at 14:31
JoshMcJoshMc
9,9102 gold badges18 silver badges37 bronze badges
1
I hit this problem earlier today: —
/opt/ibm/mqm/usr/mqm/samp/bin/amqsput ESB.TO.BPM.CLQ ESB1.DEV1
Sample AMQSPUT0 start
target queue is ESB.TO.BPM.CLQ
MQOPEN ended with reason code 2085
unable to open queue for output
Sample AMQSPUT0 end
I could see the queue on the Queue Manager local to where I was running the command ( my ESB box, running IIB 9 and MQ 8 ).
However, when I looked more deeply: —
display queue(ESB*)
1 : display queue(ESB*)
AMQ8409: Display Queue details.
QUEUE(ESB.TO.BPM.CLQ) TYPE(QLOCAL)
display queue(ESB.TO.BPM.CLQ)
2 : display queue(ESB.TO.BPM.CLQ)
AMQ8409: Display Queue details.
QUEUE(ESB.TO.BPM.CLQ) TYPE(QLOCAL)
ACCTQ(QMGR) ALTDATE(2015-04-07)
ALTTIME(13.28.28) BOQNAME( )
BOTHRESH(0) CLUSNL( )
CLUSTER(UAT1) CLCHNAME( )
CLWLPRTY(0) CLWLRANK(0)
CLWLUSEQ(ANY) CRDATE(2015-04-07)
CRTIME(13.28.28) CURDEPTH(0)
CUSTOM( ) DEFBIND(NOTFIXED)
DEFPRTY(0) DEFPSIST(YES)
DEFPRESP(SYNC) DEFREADA(NO)
….
I could immediately see the problem ….
The cluster to which I was expecting the Queue to belong was called DEV1 and yet the CLUSTER() value above was set to UAT1.
I verified this: —
display CLUSQMGR(*)
5 : display CLUSQMGR(*)
AMQ8441: Display Cluster Queue Manager details.
CLUSQMGR(LRPO1.DEV1) CHANNEL(DEV1.LRPO1.DEV1)
CLUSTER(DEV1)
AMQ8441: Display Cluster Queue Manager details.
CLUSQMGR(REP1.DEV1) CHANNEL(DEV1.REP1.DEV1)
CLUSTER(DEV1)
AMQ8441: Display Cluster Queue Manager details.
CLUSQMGR(REP2.DEV1) CHANNEL(DEV1.REP2.DEV1)
CLUSTER(DEV1)
which confirmed that the cluster name should indeed be DEV1.
I changed the Queue definition: —
alter qlocal(ESB.TO.BPM.CLQ) cluster(DEV1)
and re-tested: —
/opt/ibm/mqm/usr/mqm/samp/bin/amqsput ESB.TO.BPM.CLQ ESB1.DEV1
it responded as I’d expected: —
Sample AMQSPUT0 start
target queue is ESB.TO.BPM.CLQ
Hello BPM from ESB
Sample AMQSPUT0 end
which is nice.
Thanks to this: —
for making me think about the Cluster name within the Queue definition: —
Slide 44 says: —
In order to make a queue visible to the other members of the cluster, it is necessary to ALTER the queue and specify the cluster name:
ALTER QLOCAL(CQ1) CLUSTER(‘CLUSTER1’)
You do a remote PUT into a clustered queue. However, you cannot do a remote GET from a clustered queue.
The GET can ONLY be done from the local queue.
- Remove From My Forums
-
Question
-
User462755366 posted
Hi,
I am getting following MQ issue while pushing message to MQ in ASP.Net applications. Sometimes message passes through MQ successfully, but some times I am getting following issue
Write Exception: MQRC_UNKNOWN_OBJECT_NAME | ReasonCode:2085 | 2085 | CompCode:2
Any suggestions for this please.
Thanks
Sreenath
Answers
-
User915387828 posted
Hi,
This reason code is issued when an application opens a queue, and the queue manager cannot resolve to a queue name specified in the MQOPEN object descriptor (MQOD).
The most likely reason is that a wrong queue name was specified on the MQOPEN API call.
Resolving the problem
Debugging techniques:
If the queue is a locally defined queue:
- Verify that your program is connecting to the correct queue manager.
- Use the MQSC dis ql(*) command to determine if the target queue is defined.
- Make sure that your program specifies the correct queue name in the correct case.
If the queue is a cluster queue:
- Same general rules as above.
- If you expect the MQOPEN to resolve to a cluster queue that is not locally defined, you
must not specify the ObjectQMgrName in the object descriptor (MQOD). - 2085 may indicate WebSphere MQ cluster configuration problems.
- Ensure that the cluster queue managers have working channel connections to, and from the repository queue manager using: MQSC dis chs(*) command.
- Ensure that the queue is shared in the cluster using: MQSC dis ql(*) command.
- 2085 opening a cluster queue for input is not supported.
Please check the following link:
http://www.mqseries.net/phpBB2/viewtopic.php?=&p=172206
http://www-01.ibm.com/support/docview.wss?uid=swg21166940
http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/index.jsp?topic=%2Fcom.ibm.mq.amqzao.doc%2Ffm12810_.htm
-
Marked as answer by
Thursday, October 7, 2021 12:00 AM
Hi,
I am getting the following exception when I am trying to invoke a MDB through servlet.:-
The Connection Manager received a fatal connection error from the Resource Adaptor for resource JMS$MyMdbConnectionFactory. The exception which was received is javax.jms.JMSException: MQJMS2008: failed to open MQ queue
[9/11/07 11:44:16:588 IST] 4dfb49e7 MDBListenerIm W WMSG0019E: Unable to start MDB Listener Hello, JMSDestination jms/MyMdbQueue : javax.jms.JMSException: MQJMS2008: failed to open MQ queue
at com.ibm.mq.jms.services.ConfigEnvironment.newException(ConfigEnvironment.java:540)
at com.ibm.mq.jms.MQQueueAgent.resolveQueue(MQQueueAgent.java:460)
at com.ibm.mq.jms.MQQueueAgent.getQueueAgent(MQQueueAgent.java:271)
at com.ibm.mq.jms.MQConnectionBrowser.MQConnectionBrowserInit(MQConnectionBrowser.java:277)
at com.ibm.mq.jms.MQConnectionBrowser.<init>(MQConnectionBrowser.java:112)
at com.ibm.mq.jms.MQQueueConnection.createConnectionBrowser(MQQueueConnection.java:775)
at com.ibm.mq.jms.MQConnectionConsumer.<init>(MQConnectionConsumer.java:444)
*************************************************************************
com.ibm.mq.MQException: MQJE001: Completion Code 2, Reason 2085
at com.ibm.mq.MQQueueManager.accessQueue(MQQueueManager.java:1527)
at com.ibm.mq.MQQueueManager.accessQueue(MQQueueManager.java:1579)
at com.ibm.mq.jms.MQQueueAgent.resolveQueue(MQQueueAgent.java:451)
at com.ibm.mq.jms.MQQueueAgent.getQueueAgent(MQQueueAgent.java:271)
at com.ibm.mq.jms.MQConnectionBrowser.MQConnectionBrowserInit(MQConnectionBrowser.java:277)
at com.ibm.mq.jms.MQConnectionBrowser.<init>(MQConnectionBrowser.java:112)
at com.ibm.mq.jms.MQQueueConnection.createConnectionBrowser(MQQueueConnection.java:775)
I am trying to invoke an MDB thru servlet.I hve checked the QueueConnectionFactory Name,Queue Name,ListenerPort name
Following is the servlet code that invokes MDB
InitialContext context = new InitialContext();
QueueConnectionFactory qConnectionFactory = (QueueConnectionFactory)context.lookup("java:comp/env/jms/MyConnectionFactoryRef");
out.println(qConnectionFactory.toString());
Queue queue = (Queue)context.lookup("java:comp/env/jms/MyQueueRef");
QueueConnection qConnection = qConnectionFactory.createQueueConnection();
QueueSession qSession = qConnection.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
QueueSender sender = qSession.createSender(queue);
TextMessage message = qSession.createTextMessage();
I am getting error on qSession.createSender(queue);
Can anyone please help me with this?
Regards,
Vandana
9.3.6. Добавление тестовых сообщений в очередь
Ниже рассказывается, как поместить в ранее созданную очередь сообщения с произвольным текстом при помощи WebSphere MQ Explorer и программы-примера amqsput для WebSphere MQ, работающей с менеджером очередей по умолчанию на данном компьютере.
Видно, что после добавления сообщений в очередь значение ее атрибута «текущая длина» ( CURDEPTH ) изменяется и отражает число добавленных сообщений. О просмотре этого атрибута см. в
«Обмен сообщениями с использованием WebSphere MQ: практическое введение»
.
Применение WebSphere MQ Explorer
Выполните следующие действия.
- Выделите папку Queues менеджера очередей host1/qm1, расположенную в папке Queue Managers в окне навигатора.
- Щелкните правой кнопкой строку queue1 в таблице и выберите команду Put Test Message – откроется одноименное окно.
- Введите в поле Message data текст сообщения.
- Щелкните Put message – поле Message data опустеет. Так можно ввести несколько тестовых сообщений; после ввода каждого сообщения щелкайте Put message.
- Щелкните Close, чтобы закрыть окно.
Применение программы-примера для WebSphere MQ
Примечание Путь к каталогу с примерами программ для WebSphere MQ должен быть добавлен к пути поиска в переменных окружения ОС.
Выполните следующие действия.
- Выполните следующую команду:
Генерируется следующий вывод, после чего команда ожидает ввода пользователя:
Sample AMQSPUT0 start target queue is queue1
- Введите сообщение и нажмите клавишу Enter. Так можно ввести несколько тестовых сообщений; после ввода каждого сообщения нажимайте Enter.
- Чтобы выйти, нажмите Enter, не вводя текста.
Примечание Если вы получаете сообщение об ошибке 2059 или 2058 (см. листинг ниже), проверьте, настроен ли менеджер очередей как менеджер по умолчанию (см.
«Обмен сообщениями с использованием WebSphere MQ: практическое введение»
) и работает ли он (командой dspmq ):
Sample AMQSPUT0 start MQCONN ended with reason code 2059
Получив сообщение, подобное следующему, проверьте имена указанной в команде очереди (включая регистр символов) и созданного объекта, о просмотре имен см. в
«Обмен сообщениями с использованием WebSphere MQ: практическое введение»
.
Sample AMQSPUT0 start target queue is QUEUE1 MQOPEN ended with reason code 2085 unable to open queue for output Sample AMQSPUT0 end
Для толкования кодов возврата служит команда mqrc, принимающая код как параметр. Ниже показаны примеры вывода mqrc для кодов 2058, 2059 и 2085:
2058 0x0000080a MQRC_Q_MGR_NAME_ERROR 2059 0x0000080b MQRC_Q_MGR_NOT_AVAILABLE 2085 0x00000825 MQRC_UNKNOWN_OBJECT_NAME
Другие коды возврата MQCONN, MQOPEN и MQPUT также можно расшифровать с помощью mqrc. Подробнее о кодах возврата см. в разделе «API completion and reason codes» руководства WebSphere MQ Messages, GC34-6601.
9.3.7. Просмотр сообщений, добавленных в очередь
Здесь рассказывается, как осуществляется просмотр сообщений, находящихся в данный момент в очереди WebSphere MQ, без их удаления. Для просмотра доступно как содержимое сообщений, так и сведения о них, хранимые в дескрипторах сообщений.
Сообщения, добавляемые в очередь, являются непостоянными ( nonpersistent messages ). В поле reply-to queue manager сообщений автоматически записывается строка host1/qm1 менеджером, в чью очередь добавлены эти сообщения.
Сообщения, генерация которых описана в
«Обмен сообщениями с использованием WebSphere MQ: практическое введение»
, представляли собой дейтаграммы, то есть сообщения, не требующие ответа.
В силу этой причины значение reply-to queue не определялось WebSphere MQ Explorer или программой-примером amqsput при добавлении сообщения.
Сейчас мы воспользуемся интерфейсом WebSphere MQ Explorer либо программой-примером amqsbcg для WebSphere MQ.
Примечание Эти методы весьма удобны при разработке, тестировании и мониторинге очередей рабочих систем, поскольку такой метод просмотра никак не влияет на содержащиеся в очереди сообщения.
Применение WebSphere MQ Explorer
Выполните следующие действия.
- Щелкните правой кнопкой очередь в таблице менеджера очередей и выберите Browse Messages – откроется окно с индикатором хода операции, а затем окно Message browser.
- Каждая строка в таблице, отображаемой в окне Message browser, представляет одно из сообщений в очереди. В столбцах этой таблицы отображается информация о сообщении, которая находится в дескрипторе сообщения, а также содержимое или данные сообщения. Настраивая схему таблицы, можно изменять порядок столбцов, чтобы, например, переместить столбцы Persistence, Message type, Message data, Reply-to queue и Reply-to Queue Manager в начало таблицы.
- Некоторые типы сообщений лучше просматривать в виде двоичных данных, а не текста. Для этого дважды щелкните строку таблицы, представляющую сообщение, – откроется окно свойств сообщения. Щелкните секцию Data в этом окне.
Применение программы-примера для WebSphere MQ
Выполните следующие действия:
- Выполните следующую команду для просмотра сообщений в очереди менеджера по умолчанию; вывод команды будет перенаправлен в файл queue1.txt:
amqsbcg queue1 > queue1.txt
- Откройте queue1.txt в любом текстовом редакторе. Для каждого из сообщений в файле содержатся сведения из дескриптора и содержимое в двоичном и текстовом (справа) представлении.
Читать сведения из такого файла сложнее, чем в WebSphere MQ Explorer. Разберем значение наиболее интересных полей вывода команды amqsbcg.
Тип 8 соответствует дейтаграммам. Запросы имеют тип 1, ответы – 2, отчеты – 4.
Значение «0» свидетельствует о том, что сообщение является непостоянным, а значение «1», напротив, говорит о том, что это сообщение является постоянным.
В этом поле отображается 48-значное имя очереди ответов (reply-to queue). Если в имени меньше 48 символов, недостающие символы заменяются пробелами, расположенными справа. Такие данные называются дополненными пробелами (blankpadded), они часто используются в структурах WebSphere MQ. В этом примере данное поле в дескрипторе сообщений пусто.
ReplyToQMgr : 'host1/qm1 '
Это поле содержит 48-значное дополненное пробелами имя менеджера очереди ответов (reply-to queue manager), оно автоматически заполняется менеджером очередей при размещении сообщения.
**** Message **** length – 20 bytes 00000000: 5265 6462 6F6F 6B20 7465 7374 206D 6573 'Redbook test mes' 00000010: 7361 6765 'sage '
Здесь отображается содержимое сообщения в двоичном и (справа) в текстовом представлении. Это существенно облегчает просмотр содержимого некоторых типов сообщений, особенно объемных, которые проще просматривать в двоичном представлении. Впрочем, содержимое простых тестовых сообщений из наших примеров как раз удобнее просматривать в текстовом представлении.