2016-01-18 5 views
0

У вас есть сообщение в Websphere MQ. Прочитали сообщение, и я пытаюсь отменить сообщение в Input Queue. Порог повтора еще не достигнут. Сообщение MQ автоматически помещается в вход Q при возникновении исключения? Это мой код:Сообщение Websphere MQ doesnot backout to Input Queue

MQQueueManager qm = new MQQueueManager(""); 
MQQueue q = qm.accessQueue(""); 
MQMessage message = new MQMessage(); 
q.get(message); 
System.out.println("Retry Count"+ message.backoutCount); 
throw new NullPointerException; 

Будет ли приведенный выше код снова помещать сообщение в очередь ввода? В этом случае он не возвращает сообщение в очередь ввода. Сообщение потеряно.

ответ

1

Ваше сообщение может быть отменено только в том случае, если оно было частью транзакции. Ваш код не использует транзакции.

Ознакомьтесь с параметрами MQGMO, MQGMO_SYNCPOINT и MQGMO_SYNCPOINT_IF_PERSISTENT (найдите строку MQGMO_SYNCPOINT в следующих двух ссылках).

MQ Java Classes CMQC constants

MQ API description of MQGMO_SYNCPOINT - applicable to all languages

А также совершить() и отката() методы на MQQueueManager:

MQQueueManager class

и предлагаю вам прочитать эту общую цель объяснение сделок

Committing and backing out units of work

+0

Да .. Теперь он работает. Но я хочу, чтобы выяснилось одно. Если возникает исключение при обработке msg, будет ли msg возвращаться в Input Q для повторной обработки для количества предварительно заданных сообщений, настроенное время? Если он достиг порога, то сообщения переместились в очередь резервного копирования? В моем случае происходит то же самое. Но как только я закрою приложение, все сообщения будут возвращены в очередь ввода из очереди резервного копирования. Это случается для повторного подсчета количества повторных попыток. Поставьте здесь путаницу .. Справка по Pls – Karthik

+0

Если у вас есть порог очереди резервного копирования и резервного копирования, определенный на вашем входе q, тогда некоторые интерфейсы (а не базовый MQI) позволят только конкретному сообщение, которое должно быть отменено так много раз, прежде чем переместить его в очередь резервного копирования. Ваше описание звучит так, будто вы никогда не совершали транзакцию? Можете ли вы убрать свой вопрос (или поднять новый) с помощью своего кода, используя точки синхронизации? –