如果数据库事务使用 Spring AMQP 成功,则仅将消息发布到 RabbitMQ

Only publish messages to RabbitMQ if database transaction is successful using 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 类型的事务管理器。我想要做的是确保 Event1Event2 的发送仅在 myRepository.save(entity) 成功时发生。 RabbitTransactionManager help here or do I have to implement this myself (for example using a TransactionSynchronizationManager)?

什么叫 x() ?

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

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

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