Spring 事务和异步处理
假设某个Springbean有事务方法,它可以做两件事:Spring 事务和异步处理,spring,transactions,jms,Spring,Transactions,Jms,假设某个Springbean有事务方法,它可以做两件事: 异步发送JMS消息 更新数据库 问题是,当消息被使用时,DB事务有时没有提交,处理程序无法在DB预期值中找到 显而易见的解决方案是发送事务,但我使用ActiveMQ上可用的异步发送来提高吞吐量。若我使send成为事务性的,我将丧失异步性,并有可能获得OuOfMemory 你将如何解决这个问题 您需要使用启用XA的事务管理器,在同一个分布式事务中发送JMS消息并对DB进行更新 这不会将任何内容更改为异步:发送调用将在接收方接收消息之前返
- 异步发送JMS消息
- 更新数据库
你将如何解决这个问题 您需要使用启用XA的事务管理器,在同一个分布式事务中发送JMS消息并对DB进行更新 这不会将任何内容更改为异步:发送调用将在接收方接收消息之前返回。但是当它接收到它时,事务将被提交,并且接收者将在数据库中找到更新
我不知道OutOfMemoryErrors与此有什么关系。我认为在本例中,在事务提交之前,消息不会发送到代理,因此我担心由于许多等待消息而失去吞吐量和OOM,但看起来我错了,你的建议会解决问题。当你发送消息时,消息会发送给代理(就像执行JDBC语句时发送给数据库一样)。但是代理在事务提交之前不会将其发送给接收方(就像事务提交时JDBC语句实际上会永久保存一样)。