消息队列
2025/12/12大约 2 分钟
消息队列
消息队列(Message Queue,MQ)是分布式系统中实现异步通信、系统解耦、流量削峰的核心中间件。
目录
为什么需要消息队列
1. 异步处理
同步处理:
用户注册 → 写数据库(50ms) → 发邮件(50ms) → 发短信(50ms) → 响应(150ms)
异步处理(使用 MQ):
用户注册 → 写数据库(50ms) → 发送消息到MQ → 响应(50ms)
↓
消费者异步发邮件、发短信2. 系统解耦
耦合方式:
订单系统 → 直接调用库存系统
→ 直接调用支付系统
→ 直接调用物流系统
解耦方式(使用 MQ):
订单系统 → 发送消息到 MQ
↓
库存系统、支付系统、物流系统 订阅消息3. 流量削峰
高峰期:10000 请求/秒
↓
消息队列(缓冲)
↓
后端系统:按能力消费(1000/秒)主流消息队列对比
| 特性 | RabbitMQ | Kafka | RocketMQ |
|---|---|---|---|
| 开发语言 | Erlang | Scala/Java | Java |
| 协议 | AMQP | 自定义 | 自定义 |
| 单机吞吐 | 万级 | 百万级 | 十万级 |
| 消息延迟 | 微秒级 | 毫秒级 | 毫秒级 |
| 消息可靠性 | 高 | 高 | 高 |
| 事务消息 | 支持 | 不支持 | 支持 |
| 延迟消息 | 插件支持 | 不支持 | 支持 |
| 消息回溯 | 不支持 | 支持 | 支持 |
| 管理界面 | 好 | 一般 | 好 |
| 社区活跃度 | 高 | 高 | 高 |
| 适用场景 | 中小规模 | 大数据日志 | 电商金融 |
如何选择
| 场景 | 推荐 |
|---|---|
| 中小规模、路由灵活 | RabbitMQ |
| 大数据、日志收集、流处理 | Kafka |
| 电商、金融、需要事务消息 | RocketMQ |
| 功能丰富、易于使用 | RabbitMQ |
| 极高吞吐量 | Kafka |
| 阿里云生态 | RocketMQ |
核心概念
Producer(生产者)
消息的发送方,负责创建和发送消息。
Consumer(消费者)
消息的接收方,负责接收和处理消息。
Broker(代理/服务器)
消息队列服务端,负责存储和转发消息。
Topic(主题)
消息的分类,生产者发送消息到指定 Topic,消费者订阅 Topic 获取消息。
Queue(队列)
消息的存储容器,消息按顺序存入队列。
Message(消息)
传输的数据单元,包含消息头和消息体。
消息模式
点对点模式(P2P)
Producer → Queue → Consumer一条消息只能被一个消费者消费。
发布订阅模式(Pub/Sub)
Producer → Topic → Consumer1
→ Consumer2
→ Consumer3一条消息可以被多个消费者消费。
