Устранение ошибок 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 Сообщение о доходах


person happyNewLife    schedule 15.05.2013    source источник


Ответы (3)


Закомментируйте 2 строки с помощью MQException.logExclude() и просто используйте:

MQException.log = null;
person Roger    schedule 15.05.2013

Если вы этого не хотите, то в своем блоке catch проверьте, равен ли код причины исключения 2195, и напишите соответствующий код.

Нравиться:

catch (MQException mqe) {
     if(mqe.reasonCode==2195)
     {
/* DO NOTHING FOR THIS ERROR */

      }
     else
     {  
        throw mqe;
      }

}
person nitgeek    schedule 15.05.2013
comment
В коде нет возбуждения исключений. Он записывается после выполнения метода get автоматически при успешном чтении сообщения из очереди. (НЕ ИСКЛЮЧЕНИЕ) - person happyNewLife; 15.05.2013

Я столкнулся с проблемой, даже я поставил

MQException.log = null;

Он по-прежнему печатал «MQJE001: код завершения« 2 », причина« 2195 ».

В конце концов я узнал, что строка печатается из MQDataException.

Добавлена ​​строка ниже для решения проблемы.

MQDataException.log = null;
person Yee Yang    schedule 28.05.2015