如果使用Spring AMQP成功完成数据库事务,则只向RabbitMQ发布消息

时间:2016-02-24 12:38:26

标签: spring rabbitmq spring-transactions spring-amqp

让我们说我的方法看起来像这样:

@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成功时才发送Event2myRepository.save(entity)RabbitTransactionManager是否有帮助,或者我必须自己实施(例如使用TransactionSynchronizationManager)?

1 个答案:

答案 0 :(得分:2)

什么叫x()

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

如果它是某个任意线程,那么你需要在调用x之前启动一个兔子事务并在之后提交它。

在任何一种情况下,您的兔子频道都必须是交易性的。