2013-08-28 2 views
0

У меня возникла ситуация, когда я читаю сообщения из очереди, используя потребитель сообщения (javax.jms.MessageConsumer). Используемый сеанс использует режим AUTO_ACKNOWLEDGE.JMS AutoAcknowledge при использовании Message Consumer

Из того, что я читал до сих пор в режиме AUTO_ACK:

В автоматическом признании, если метод потребителя OnMessage() завершается без ошибок сообщение считается полученным и обрабатывается успешно, он будет затем удаляется с сервера JMS.

Мой вопрос, когда это сообщение считается ACK производителем JMS с учетом I`m не используется MDB, который имеет метод OnMessage(), но чтение сообщений с помощью сообщения потребителя, описанный ранее.

Является ли сообщение ACK'ed, как только я успешно прочитал его, используя messageConsumer? Что произойдет, если дальше по логической цепочке метод, который использует соответствующее сообщение, вызовет ошибку? К тому времени сообщение будет ACK'ed?

ответ

1

Javadoc для постоянной AUTO_ACKNOWLEDGE говорит, что это:

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

Я подозреваю, что вы вызываете получить на MessageConsumer (хотя вы явно не указать, что), поэтому если вы установите AUTO_ACKNOWLEDGE признается временем получить прибыль.

Конечно, если у вас есть транзакционная сессия, тогда режим подтверждения игнорируется, и сообщение не считается принятым до тех пор, пока сеанс не будет выполнен.

+0

Да, я нахожу получениеNoWait. – Sergiu

Смежные вопросы