Как остановить доставку сообщения на управляемый сообщениями компонент? - PullRequest
2 голосов
/ 19 мая 2011

Вопрос

Можно ли остановить компонент, управляемый сообщениями (программно), чтобы он не потреблял новые сообщения, а обрабатывал выполняющиеся транзакции как обычно?

(Это продолжение Как остановить обработку сообщений перед удалением? ).

Учитывая

  • JBoss 4.2.3 с JBoss Messaging
  • компонентом, управляемым сообщениями, в соответствии с EJB 2.0

Неудачные попытки

  • Я хотел бы использоватьметод MBean stopDelivery, но, к сожалению, он немедленно закрывает транзакции (см. ошибку # EJBTHREE-1870 ) и тем самым вызывает множество исключений.
  • Я пытался уменьшить максимальный размер пула до0 в консоли JMX, но на количество активных сессий это никак не влияет.
  • Я мог бы остановить очередь, но я должен обработать NameNotFoundException s внутри производителей.

1 Ответ

1 голос
/ 02 июля 2012

Ну вот, почти все можно достичь с помощью обертки, Вы можете разрешить MDB сохранять полученное сообщение, но ввести логическое значение stopDelivery, перед обработкой сообщения бизнес-логикой проверьте, является ли stopDelivery установите в true, если это так, отправьте сообщение обратно в очередь, откуда оно пришло.

Таким образом, даже очередь все еще движется, но если вы не отключите stopDelivery, содержимое очереди будет зависать

...