Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 事务和异步处理_Spring_Transactions_Jms - Fatal编程技术网

Spring 事务和异步处理

Spring 事务和异步处理,spring,transactions,jms,Spring,Transactions,Jms,假设某个Springbean有事务方法,它可以做两件事: 异步发送JMS消息 更新数据库 问题是,当消息被使用时,DB事务有时没有提交,处理程序无法在DB预期值中找到 显而易见的解决方案是发送事务,但我使用ActiveMQ上可用的异步发送来提高吞吐量。若我使send成为事务性的,我将丧失异步性,并有可能获得OuOfMemory 你将如何解决这个问题 您需要使用启用XA的事务管理器,在同一个分布式事务中发送JMS消息并对DB进行更新 这不会将任何内容更改为异步:发送调用将在接收方接收消息之前返

假设某个Springbean有事务方法,它可以做两件事:

  • 异步发送JMS消息
  • 更新数据库
问题是,当消息被使用时,DB事务有时没有提交,处理程序无法在DB预期值中找到

显而易见的解决方案是发送事务,但我使用ActiveMQ上可用的异步发送来提高吞吐量。若我使send成为事务性的,我将丧失异步性,并有可能获得OuOfMemory


你将如何解决这个问题

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

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


我不知道OutOfMemoryErrors与此有什么关系。

我认为在本例中,在事务提交之前,消息不会发送到代理,因此我担心由于许多等待消息而失去吞吐量和OOM,但看起来我错了,你的建议会解决问题。当你发送消息时,消息会发送给代理(就像执行JDBC语句时发送给数据库一样)。但是代理在事务提交之前不会将其发送给接收方(就像事务提交时JDBC语句实际上会永久保存一样)。