У меня есть внешняя программа, которая будет вызывать хранимую процедуру, чтобы дождаться сообщения в очереди и затем обработать его.Иногда проблема заключается в том, что сообщение, прочитанное из очереди, может не обрабатываться должным образом. Когда это происходит, я хотел бы оставить сообщение в очереди до его обработки.
Оно выглядит, если очередь не созданапри указании RETENTION сообщение всегда будет удаляться из очереди при успешном ожидании WAITFOR, если транзакция не будет отменена.Но, как вы можете видеть, я не смогу узнать, является ли сообщение действительным, пока хранимая процедура не вернет сообщение вызывающей стороне, то есть программе java.Мне интересно, можно ли разбить «начать транзакцию» и «зафиксировать» или «откат» на две хранимые процедуры: вызвать хранимую процедуру, которая начинает транзакцию, и сначала ждать сообщение;когда оно возвращается вместе с сообщением, попробуйте обработать сообщение в коде Java, если сообщение успешно обработано, вызовите 2-ю хранимую процедуру, чтобы зафиксировать транзакцию, или вызовите другую хранимую процедуру, чтобы откатить ее и поместить сообщение обратно в очередь..
Меня интересует, как указать правильную транзакцию для фиксации или отката, поскольку они не вызываются в одной хранимой процедуре?
Есть ли еще какая-нибудь хорошая практика для решения этой ситуации?У меня есть другая альтернативная идея - создать очередь исключений, пусть java-код помещает сообщение об ошибке в очередь исключений.
Любые комментарии приветствуются!