解耦:生产者不依赖消费者的实现与状态;削峰:突发流量先入队,系统按能力消化;异步:耗时操作后台处理,主流程快速返回。
但消息队列也引入新复杂度:消息可靠、重复消费、顺序性,都需要配套治理。
使用原则:能不同步就别同步,但别为简单场景引入队列增加复杂度。
消息队列的典型用途。
下单后短信/邮件通知。
转码、报表、批处理。
业务事件触发的后续动作。
大促/秒杀流量缓冲。
上下游独立演进。
日志与埋点异步上报。
从选型到稳定运行。
按吞吐、可靠性与团队熟悉度选 RabbitMQ/Kafka 等。
定义消息结构、队列、交换机与路由规则。
处理好可靠投递、重试与死信,保证不丢消息。
消费端幂等设计,监控积压与失败,异常可回溯。
两种主流选型。
| 维度 | RabbitMQ | Kafka |
|---|---|---|
| 定位 | 灵活路由、低延迟 | 高吞吐、日志流 |
| 吞吐 | 中等 | 极高 |
| 路由能力 | 强(交换机) | 较弱 |
| 适合场景 | 业务消息 | 大数据流、日志 |
用持久化 + 生产者确认 + 消费确认,配合死信队列与重试,把丢消息风险降到最低。
消费端必须幂等:用业务唯一键去重或设计幂等操作,这是消息系统的必修课。
监控队列积压并告警,消费端扩容、批量处理、临时降级,及时恢复。
简单同步调用、团队无运维能力、无异步需求的场景,别为了“先进”引入复杂度。