0

假设一些 spring bean 有事务方法,它做了两件事:

  • 异步发送 JMS 消息
  • 更新数据库

问题是当消息被消费时,数据库事务有时还没有提交,处理程序在数据库期望值中找不到。

明显的解决方案 - 是发送事务,但我使用 ActiveMQ 上可用的异步发送来增加吞吐量。如果我进行事务性发送,我会丧失异步性,并且还会冒着获得 OuOfMemory 的风险。

你将如何解决这个问题?

4

1 回答 1

2

您需要使用支持 XA 的事务管理器,发送 JMS 消息并在同一个分布式事务中对数据库进行更新。

这不会改变任何异步性:发送调用将在接收者收到消息之前返回。但是当它接收到它时,事务将被提交,并且接收者会在数据库中找到更新。

我看不出 OutOfMemoryErrors 与此有什么关系。

于 2012-09-14T09:46:38.190 回答