消息驱动的 bean 和事务

Message driven beans and transactions

我知道有很多关于 message driven beans 和交易的问题,但是我无法找到(我认为)一定是常见情况的答案。

我有一个可以调用来发送电子邮件的服务。调用时,它会在 table 中创建电子邮件记录,然后将 ID 推送到 ActiveMQ 进行处理。到目前为止一切正常,但是队列选择 ID 并尝试在事务提交之前发送电子邮件,并且电子邮件不在数据库中。

服务本身是事务性的,但它也可能是更大事务的一部分。

处理这种情况的最佳方法是什么?我现在在 Consumer 中使用 Thread.sleep,它可以工作;然而这感觉很脏...

(我没有使用 Spring)

您可以有一个交易,它可以执行通常的操作并在 table 中插入电子邮件。不要在交易中发送邮件。

然后(交易成功)有一个进程通过转发到排队服务来清除电子邮件table。

也许在保留邮件后立即进行冲洗会有所帮助?

我真的很想知道如何解决这个问题,因为我们的应用程序在工作中遇到了类似的问题。