让我们说我的方法看起来像这样:
@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)?
答案 0 :(得分:2)
什么叫x()
?
如果从Rabbit接收到一些消息后它是一个RabbitMQ监听器容器线程,请将JpaTransactionManager添加到容器中,并且将为您同步兔子事务。
如果它是某个任意线程,那么你需要在调用x之前启动一个兔子事务并在之后提交它。
在任何一种情况下,您的兔子频道都必须是交易性的。