RabbitMQ/Spring-AMQP 高级特性:事务机制与消息限流实战
在分布式系统中,消息的可靠投递至关重要。Spring AMQP 提供了多种机制来保障这一点,其中事务(Transaction)和限流(Flow Control)是生产环境中最常用的两个手段。
1. 事务机制
AMQP 协议实现了事务机制,主要用于确保消息发布的原子性。简单来说,它允许你将多个操作(如发送多条消息、确认操作)绑定在一起,要么全部成功,要么全部失败。
实现示例
在 Spring Boot 中,我们可以利用 @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 不允许同一个通道同时使用事务模式和 Confirm 模式。因此,必须显式禁用 Confirm 功能。
spring:


