概念

RabbitMQ 是基于 AMQP 协议实现的,该协议实现了事务机制,因此 RabbitMQ 也支持事务机制。Spring AMQP 也提供了对事务相关的操作。RabbitMQ 事务允许开发者确保消息的发送和接收是原子性的,要么全部成功,要么全部失败。

代码

1.不使用事务

2.使用事务

核心逻辑

1)ConnectionFactory:依赖 Spring 自动配置的 ConnectionFactory(RabbitMQ 连接工厂),无需手动配置连接信息(由 application.yml 中的 spring.rabbitmq 配置自动生成);

2)自定义 RabbitTemplate 并开启事务(setChannelTransacted(true)),替代 Spring 默认的非事务版 RabbitTemplate;

3)注册 RabbitTransactionManager(RabbitMQ 事务管理器),供 @Transactional 注解调用,实现事务的提交 / 回滚。

@Transactional 注解绑定 RabbitTransactionManager,方法内任意位置抛出异常时,所有已发送的 RabbitMQ 消息都会被回滚

上面三个部分缺一不可;

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐