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 的事务管理器。我想要做的是确保 Event1Event2 的发送仅在 myRepository.save(entity) 成功时发生。是否RabbitTransactionManager在这里提供帮助还是我必须自己实现(例如使用 TransactionSynchronizationManager )?

请您参考如下方法:

什么调用了 x()

如果它是一个 RabbitMQ 监听器容器线程,在从 rabbit 接收到一些消息后,将 JpaTransactionManager 添加到容器中,rabbit 事务将为您同步。

如果它是某个任意线程,那么您需要在调用 x 之前启动一个 rabbit 事务,然后再提交它。

无论哪种情况,您的兔子 channel 都需要是事务性的。


标签:Spring
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号