2013-04-10 6 views
2

Я пытаюсь использовать apache nms stomp для отправки/получения сообщений. Я не могу использовать режим Transnational ack из-за использования hornetq. Мой потребитель сценарий:NACK сообщение в apache nms

  1. Получить сообщение
  2. Процесс сообщение
  3. ACK, если процесс удастся (с message.Acknowledge())
  4. NACK это, если процесс не удалось (????)

Все, что я хочу, это NACK сообщение, если процесс не выполнен; так как я могу сделать NACK сообщение в apache nms?

+0

Нужна дополнительная информация. Что поддерживает ваш провайдер STOMP в терминах протоколов STOMP. Вам нужно как минимум 1.1 для сообщения NACK. –

+0

Hornetq-2.3.0.CR2 поддерживает 1.1 и 1.2. – united

ответ

1

Я не знаю, почему вы не можете использовать транзакции с HornetQ. Единственный способ, с помощью которого клиент посылает NACK, - использовать транзакцию и отменить транзакцию при ошибке. После того, как вы достигнете настроенных Макс. Разрешенных повторных отправлений, клиент будет NACK для сообщения.

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

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

+0

HornetQ руководство пользователя: подтверждения сообщений не являются транзакционными. Кадр ACK не может быть частью транзакции (он будет проигнорирован, если установлен его заголовок транзакции). – united

+0

Затем используйте ActiveMQ или Apollo, который соответствует спецификации. –

+0

Если я не получаю сообщение, останется ли он в очереди? (сообщение не будет потеряно?) – united

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