在分布式架构中,消息队列是解耦、削峰和异步化的核心组件。合理使用能显著提高系统的稳定性和扩展性。
1. 消息队列的主要作用
- 解耦:生产者和消费者通过队列交互,彼此无需直接依赖。
- 削峰填谷:高峰流量先进入队列,后端服务按能力逐步消费。
- 异步化:非实时需求(如邮件发送、日志落库)可通过消息队列异步处理。
- 广播:一条消息可被多个消费者订阅,适合通知类场景。
2. 常见消息队列产品
- Kafka:高吞吐、分区机制强,适合日志收集、大数据场景。
- RabbitMQ:协议支持广泛,功能丰富,适合业务系统。
- RocketMQ:阿里开源,事务消息支持较好。
- ActiveMQ:老牌产品,但性能相对一般。
3. 使用中的设计要点
-
消息可靠性:
- 生产端确认机制(确认消息是否成功写入队列)。
- 消费端幂等性(避免重复消费造成数据异常)。
-
消息顺序性:
- 单分区保证有序,但降低并发。
- 业务上可按 key 分区,保持局部有序。
-
延时消息:适合订单超时关闭、定时任务触发。
-
死信队列:处理无法消费的异常消息,避免阻塞主队列。
4. 典型场景案例
- 电商秒杀:用户下单请求先写入 MQ,后端异步处理订单逻辑,避免数据库被打爆。
- 日志系统:应用日志通过 MQ 汇聚到日志中心,供后续分析。
结论:消息队列不是银弹,但在高并发和解耦需求下,是后端架构不可缺少的模块。