Подтверждение от Потребителя в ActiveMQ - PullRequest
1 голос
/ 02 марта 2012

Я пишу приложение на Java, используя ActiveMQ. У меня есть Producer Class (который принимает пользовательский ввод) и Consumer Class со слушателем, поэтому, как только приходят сообщения, Message Listener выполняет функцию onMessage (msg). Мой вопрос, тем не менее, когда потребитель отправляет подтверждение брокеру, чтобы сообщение вышло из очереди у брокера? Это происходит после выполнения действий, записанных в функции onMessage (msg), или только когда вызывается функция onMessage (msg)?

Ответы [ 2 ]

3 голосов
/ 02 марта 2012

Зависит от того, как он настроен, и частично от того, как вы используете транзакции .

Используете ли вы бин, управляемый сообщениями? В этом случае я считаю, что подтверждение будет отправлено, когда транзакция будет успешно завершена. См. спецификацию (в частности, версию 'ejbcore'), раздел 5.4.14 Подтверждение сообщения для управляемых сообщениями компонентов JMS , в котором говорится:

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

Далее говорится:

Если используется разграничение транзакции, управляемой бином, получение сообщения не может быть частью транзакции, управляемой бином, и в этом случае квитирование подтверждается контейнером. Если используется разграничение управляемых компонентом транзакций, поставщик компонентов может указать, следует ли применять семантику JMS AUTO_ACKNOWLEDGE или семантику DUPS_OK_ACKNOWLEDGE, используя элемент activationConfig аннотации MessageDriven или элемент дескриптора развертывания activation-config-property. .

Но так как вы действительно не должны использовать транзакции, управляемые bean-компонентами, это, мы надеемся, не имеет значения.

1 голос
/ 02 марта 2012

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

...