RabbitMQ/Spring-AMQP 高级特性详解
在构建高可靠的消息系统时,除了基础的收发功能,事务控制与流量限制同样是保障系统稳定性的关键。本文将结合 Spring Boot 实战,深入探讨 RabbitMQ 的事务机制与消费者限流配置。
1. 事务机制
AMQP 协议实现了事务机制,主要用于确保消息发布的原子性。简单来说,它允许你将多个操作(如发送多条消息)绑定在一起,要么全部成功提交,要么全部回滚。
代码实现
在 Spring 环境中,我们可以利用 @Transactional 注解配合自定义的 RabbitTemplate 来实现事务发送。注意,如果业务逻辑中抛出异常,事务范围内的所有消息发送都会失败并回滚。
@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 "发送成功";
}
}
关键点说明: Spring Boot 的 RabbitMQ 自动配置默认开启确认模式(Publisher Confirms),但 RabbitMQ 不允许同一个通道同时使用事务模式和确认模式。因此,必须在配置文件中显式禁用 Publisher Confirms。
spring:


