Что происходит на очереди JMS, когда onMessage () бросает JMSException?

Я использую Spring 2.5 со своим пользовательским классом, который реализует MessageListener. Если JmsException брошен в мой onMessage () метод, что происходит с состоянием очереди?

Сообщение считают "поставленным" очередью, которой называют момент onMessage? Или JmsException инициировал некоторый откат, и сообщение повторно введено на очереди?

Заранее спасибо!

15
задан user311121 7 April 2010 в 15:14
поделиться

1 ответ

Из спецификации JMS 1.1 ...

4.5.2 Асинхронная доставка

Клиент может зарегистрировать объект, реализующий интерфейс JMS MessageListener, с помощью MessageConsumer. Когда сообщения поступают к потребителю, провайдер доставляет их, вызывая метод onMessage слушателя.

Слушатель может вызвать исключение RuntimeException; однако это считается ошибкой программирования клиента. Слушатели с хорошим поведением должны улавливать такие исключения и пытаться перенаправить сообщения, вызывающие их, в какую-либо форму назначения «необработанного сообщения», зависящего от приложения.

Результат выдачи слушателем исключения RuntimeException зависит от режима подтверждения сеанса.

  • AUTO_ACKNOWLEDGE или DUPS_OK_ACKNOWLEDGE - сообщение будет немедленно доставлено повторно. количество раз, которое провайдер JMS повторно доставит одно и то же сообщение, прежде чем отказаться, зависит от провайдера. Поле заголовка сообщения JMSRedelivered будет установлено для сообщения, доставленного повторно при таких обстоятельствах.
  • CLIENT_ACKNOWLEDGE - следующее сообщение для слушателя доставлено. Если клиент желает повторно доставить предыдущее неподтвержденное сообщение, он должен вручную восстановить сеанс.
  • Транзакционный сеанс - доставлено следующее сообщение для слушателя. Клиент может либо зафиксировать, либо откатить сеанс (другими словами, исключение RuntimeException не автоматически откатывает сеанс).

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

16
ответ дан 1 December 2019 в 04:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: