在电商大促、秒杀活动等高并发场景下,请求量可能瞬间飙升到平时的几十倍。如果让所有请求直接打到数据库,系统很容易被压垮。消息队列的作用是把请求先收进缓冲区,再按照下游的处理能力有序消费,实现削峰填谷。它同时承担了系统解耦和异步化的职责:上游发送消息后无需等待下游完成即可返回响应,各模块之间的依赖被大大降低。
Kafka以高吞吐和持久化著称,擅长日志采集、流式数据处理和事件驱动架构,常与大数据生态配合使用;RocketMQ由阿里巴巴开源,对顺序消息、事务消息和延迟消息支持完善,在电商交易等对可靠性要求高的场景应用广泛;RabbitMQ则基于AMQP协议,功能全面、路由灵活,适合中小规模的业务解耦。三者在吞吐、可靠性和功能特性上各有侧重,选型要结合业务的真实诉求。
使用消息队列并非没有代价。它引入了分布式系统的复杂度,需要关注消息的重复消费、顺序保证、丢失补偿等问题。通常通过幂等设计解决重复,通过事务消息或本地消息表保证最终一致性,通过重试和死信队列兜底异常。团队在引入前应评估是否真的需要:如果只是简单的异步通知,也许一个任务队列就够。消息队列解决的是规模化问题,规模未到之前,简单方案往往更可靠。