Для этого вы можете посмотреть различные режимы подтверждения, которые существуют в JMS.См. Эту статью http://www.javaworld.com/javaworld/jw-02-2002/jw-0315-jms.html.
Подходящий режим для вас будет режим клиента.Таким образом, в основном, клиент должен признать, когда он счастлив, что обработал сообщение.
Вы можете вызвать подтверждение после вызова процесса (сообщения), если в методе обработки (сообщения) возникает исключение, сообщение не будет удалено из-за отсутствия подтверждения.Мы использовали этот подход ранее с Oracle AQ, и он работает очень хорошо.
Этот подход означает, что вам не нужно беспокоиться о транзакциях для сообщений в очереди (транзакции с базой данных - другая история).Единственное, что вам нужно, это убедиться, что ваше приложение может обработать вызов процесса (сообщения) с потенциальными дублирующимися сообщениями