Управляемые сообщениями компоненты и транзакции

Я знаю, что есть много вопросов о message driven beans и транзакции, однако я не смог найти ответ (что я думаю) должен быть распространенным сценарием.

У меня есть служба, которую можно вызывать для отправки писем. Когда он вызывается, он создает запись электронной почты в таблице, а затем отправляет идентификатор в ActiveMQ для обработки. Пока все хорошо, однако очередь забирает идентификатор и пытается отправить электронное письмо до того, как транзакция будет совершена, и электронное письмо не будет в базе данных.

Сам сервис является транзакционным, но он также может быть частью более крупной транзакции.

Каков наилучший способ справиться с этим сценарием? Я использую Thread.sleep на данный момент в Consumer который работает; однако это чувствует себя грязным...

(Я не использую Spring)

2 ответа

Решение

У вас может быть транзакция, которая делает обычные вещи плюс вставляет электронные письма в таблицу. Не отправляйте письма в транскрипции.

Затем, после этого (транзакция завершается успешно), процесс очистки таблицы электронной почты пересылается в службу очередей.

Может быть, выполнение сброса сразу после сохранения почты поможет?

Мне на самом деле любопытно посмотреть, как это можно исправить, так как у нас есть похожая проблема в нашем приложении на работе.

Другие вопросы по тегам