Проблема обработки WebLogic / Message Driven Bean - PullRequest
2 голосов
/ 08 декабря 2011

Технологии:

Jave EE, Weblogic 10.3, JMS

Сценарий:

Модуль EJB, скажем Module_1, с 3 различными классами управляемых сообщениями компонентов (MDB), контролирующими 3 различных очереди сообщений Java (JMS). Сообщения постоянно добавляются к этим бобам.

Проблема:

Один раз в день, в определенное время, мне нужно перезапустить весь Weblogic Server, не теряя ни одного сообщения. Также на этом сервере развернут другой модуль, например, Module_2. И мне нужно убедиться, что Module_2 запускается до Module_1.

Если какое-либо сообщение обрабатывается каким-либо из MDB в заранее установленное время выключения, то, я думаю, мне придется ждать, пока оно не завершится. Хотя не уверен в этом.

Может кто-нибудь предложить какой-нибудь стандартный подход / конфигурацию для достижения этого?

Кроме того, что если Weblogic Server будет перезапущен напрямую без какой-либо помощи? Как это повлияет на сообщения, все еще находящиеся в очереди, и те, которые находились в процессе обработки?

Спасибо.

1 Ответ

1 голос
/ 19 декабря 2011

Порядок, в котором запускаются модули, является параметром config: проверьте <deployment-order>10200</deployment-order> в config.xml.Модуль с меньшим номером будет развернут перед модулем с большим номером.

Что касается выключения, вам нужно выполнить «Изящное завершение» (http://docs.oracle.com/cd/E13222_01/wls/docs81/adminguide/overview_lifecycle.html#1045901). Это должно привести к тому, что очередь перестанет принимать новые сообщения, убедитесь, что все сообщениясохраняются, затем дождитесь обработки всех сообщений в полете. Только после этого они прекратятся.

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

...