Управляемые сообщениями компоненты и транзакции
Я знаю, что есть много вопросов о message driven beans
и транзакции, однако я не смог найти ответ (что я думаю) должен быть распространенным сценарием.
У меня есть служба, которую можно вызывать для отправки писем. Когда он вызывается, он создает запись электронной почты в таблице, а затем отправляет идентификатор в ActiveMQ
для обработки. Пока все хорошо, однако очередь забирает идентификатор и пытается отправить электронное письмо до того, как транзакция будет совершена, и электронное письмо не будет в базе данных.
Сам сервис является транзакционным, но он также может быть частью более крупной транзакции.
Каков наилучший способ справиться с этим сценарием? Я использую Thread.sleep на данный момент в Consumer
который работает; однако это чувствует себя грязным...
(Я не использую Spring)
2 ответа
У вас может быть транзакция, которая делает обычные вещи плюс вставляет электронные письма в таблицу. Не отправляйте письма в транскрипции.
Затем, после этого (транзакция завершается успешно), процесс очистки таблицы электронной почты пересылается в службу очередей.
Может быть, выполнение сброса сразу после сохранения почты поможет?
Мне на самом деле любопытно посмотреть, как это можно исправить, так как у нас есть похожая проблема в нашем приложении на работе.