1. 事务
AMQP 协议实现了事务机制,主要用于确保消息的原子性发布和确认。简单来说,它允许你将多个操作(如发送消息、确认消息)绑定在一起,要么全部成功,要么全部失败。
发送消息示例
在 Spring Boot 中,我们需要配置一个支持事务的 RabbitTemplate。注意,Spring Boot 的 RabbitMQ 自动配置默认开启 Publisher Confirms,但 RabbitMQ 不允许同一个通道同时使用事务模式和确认模式,因此必须禁用 Publisher Confirms。
@RestController
@RequestMapping("/producer")
public class ProducerController {
@Resource(name = "transRabbitTemplate")
private RabbitTemplate transRabbitTemplate;
@Transactional
@RequestMapping("/trans")
public String trans() {
// 发送第一条消息
transRabbitTemplate.convertAndSend("", Constants.TRANS_QUEUE, "trans test ---> 1");
// 故意抛出异常,模拟业务失败
int num = 5 / 0;
// 如果上面不报错,才会执行这里
transRabbitTemplate.convertAndSend("", Constants.TRANS_QUEUE, "trans test ---> 2");
return "发送成功";
}
}
关键配置
1. 禁用 Publisher Confirms 由于事务模式与 Confirm 模式互斥,需在配置文件中明确关闭:
spring:
rabbitmq:
publisher-confirm-type: none


