Устранение ошибок MQRC 2195 в автономном приложении IBM MQ
РЕШИТЬ
Я нашел ответ от IBM Technote IZ66146
Надеюсь, что это помогает другим с той же проблемой.
Я написал простой метод для чтения сообщений из очереди MQ.
В цикле я пытаюсь прочитать сообщение (с waitInterval). После успешного чтения сообщения из очереди возвращается код возврата 2195. Как я могу решить это?
Вот упрощенная версия моего кода без обработки исключений или любой другой вещи.
public static void main(String args[]) {
MQException.logExclude(MQException.MQRC_NO_MSG_AVAILABLE);
MQException.logExclude(MQException.MQRC_UNEXPECTED_ERROR);
MQException.log = null;
while (true) {
incomeDeployMsg = readFromQueue(waitReadInterval);
System.out.println(dateFormater.format(new Date()) + " Income msg");
}
}
public String readFromQueue(int waitInterval) throws MQException{
MQMessage message = new MQMessage();
try {
if (m_inQueue == null || !m_inQueue.isOpen())
m_inQueue = m_mqQmgr.accessQueue(m_inQueueName, CMQC.MQOO_INQUIRE + CMQC.MQOO_FAIL_IF_QUIESCING + CMQC.MQOO_INPUT_SHARED);
message.messageId = CMQC.MQMI_NONE;
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = CMQC.MQGMO_WAIT;
gmo.waitInterval = waitInterval;
m_inQueue.get(message, gmo);
return message.readStringOfCharLength(message.getMessageLength());
} catch (MQException mqe) {
throw mqe;
} finally {
message.clearMessage();
}
}
Первая строка в результате не из моего кода!!! Я думаю, что это классы IBM, которые выводят его на стандартный вывод. Как я могу устранить ошибку?
Результат:
MQJE001: код завершения '2', причина '2195'.
2013-05-15 11:44:27 Доход MSG
3 ответа
Закомментируйте 2 строки с помощью MQException.logExclude() и просто используйте:
MQException.log = null;
Если вы не хотите этого, то в своем блоке catch проверьте, является ли код причины исключения 2195, и напишите соответствующий код.
Подобно:
catch (MQException mqe) {
if(mqe.reasonCode==2195)
{
/* DO NOTHING FOR THIS ERROR */
}
else
{
throw mqe;
}
}
У меня есть проблема, даже я поставил
MQException.log = null;
На нем все еще напечатано "MQJE001: код завершения" 2 ", причина" 2195 "".
В конце концов я узнал, что строка печатается из MQDataException.
Добавлена строка ниже для решения проблемы.
MQDataException.log = null;