Как изящно закрыть Spring JMS MessageListenerAdapter - PullRequest
3 голосов
/ 22 июня 2009

У меня есть обработчик сообщений, который получает из очереди JMS и отправляет результаты в другую очередь JMS. Обработчик сообщений находится в Spring DefaultMessageListenerContainer. Когда контейнер закрывается, я хотел бы, чтобы он завершил обработку любых запросов, которые он уже использовал, и отправил результаты. В то же время он больше не должен получать новые сообщения из очереди запросов.

Прямо сейчас, без специальных положений о выключении, безопасных ApplicationContext.registerShutdownHook (), контейнер ожидает возврата любых ожидающих вызовов listernerMethod, но не отправляет результаты в очередь ответов.

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

1 Ответ

2 голосов
/ 25 июня 2009

Я думаю, что путь должен идти через интерфейс DisposableBean или аннотацию @PreDestroy. ИМХО, главное, чтобы не позволить Spring завершить работу DMLC, а позволить этому сделать компонент, который знает о сообщениях, находящихся в данный момент «внутри системы». Таким образом, вы перестаете прослушивать новые сообщения, ожидая завершения обработанных в данный момент сообщений.

Используя атрибут depends-on в объявлениях bean-компонентов, вы также можете определить порядок завершения bean-компонентов. Подробнее об этом в справочной документации Spring .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...