spring之如果使用 Spring AMQP 的数据库事务成功,则仅将消息发布到 RabbitMQ
cloudgamer
阅读:15
2024-11-01 17:39:52
评论:0
假设我有一个看起来像这样的方法:
@Transactional
public void x(Entity entity) {
// do something
myRepository.save(entity);
rabbitTemplate.convertAndSend(new Event1());
rabbitTemplate.convertAndSend(new Event2());
}
myRepository
使用类型为 org.springframework.orm.jpa.JpaTransactionManager
的事务管理器。我想要做的是确保 Event1
和 Event2
的发送仅在 myRepository.save(entity)
成功时发生。是否RabbitTransactionManager在这里提供帮助还是我必须自己实现(例如使用 TransactionSynchronizationManager )?
请您参考如下方法:
什么调用了 x()
?
如果它是一个 RabbitMQ 监听器容器线程,在从 rabbit 接收到一些消息后,将 JpaTransactionManager 添加到容器中,rabbit 事务将为您同步。
如果它是某个任意线程,那么您需要在调用 x 之前启动一个 rabbit 事务,然后再提交它。
无论哪种情况,您的兔子 channel 都需要是事务性的。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。