Documentation Index
Fetch the complete documentation index at: https://amigoer.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
消息队列(Message Queue,MQ)是分布式系统中实现异步通信、系统解耦、流量削峰的核心中间件。
为什么需要消息队列
1. 异步处理
同步处理:
用户注册 → 写数据库(50ms) → 发邮件(50ms) → 发短信(50ms) → 响应(150ms)
异步处理(使用 MQ):
用户注册 → 写数据库(50ms) → 发送消息到MQ → 响应(50ms)
↓
消费者异步发邮件、发短信
2. 系统解耦
耦合方式:
订单系统 → 直接调用库存系统
→ 直接调用支付系统
→ 直接调用物流系统
解耦方式(使用 MQ):
订单系统 → 发送消息到 MQ
↓
库存系统、支付系统、物流系统 订阅消息
3. 流量削峰
高峰期:10000 请求/秒
↓
消息队列(缓冲)
↓
后端系统:按能力消费(1000/秒)
RabbitMQ vs Kafka vs RocketMQ 对比
基本信息
| 特性 | RabbitMQ | Kafka | RocketMQ |
|---|
| 开发语言 | Erlang | Scala/Java | Java |
| 开源协议 | MPL 2.0 | Apache 2.0 | Apache 2.0 |
| 维护方 | VMware | Apache/Confluent | Apache/阿里巴巴 |
| 协议支持 | AMQP、STOMP、MQTT | 自定义协议 | 自定义协议 |
架构设计
| 特性 | RabbitMQ | Kafka | RocketMQ |
|---|
| 架构模型 | Broker 中心化 | 分布式日志 | 分布式消息 |
| 元数据管理 | 内置/外部存储 | ZooKeeper/KRaft | NameServer |
| 消息存储 | 内存 + 磁盘 | 磁盘顺序写 | 磁盘顺序写 |
| 消息模型 | Exchange → Queue | Topic → Partition | Topic → Queue |
| 消费模式 | Push | Pull | Push/Pull |
性能对比
| 指标 | RabbitMQ | Kafka | RocketMQ |
|---|
| 单机吞吐量 | 万级 | 百万级 | 十万级 |
| 消息延迟 | 微秒级 | 毫秒级 | 毫秒级 |
| Topic 数量影响 | 小 | 大(慎用过多) | 小 |
| 消息堆积能力 | 一般 | 强 | 强 |
功能特性
| 功能 | RabbitMQ | Kafka | RocketMQ |
|---|
| 顺序消息 | ✅ 单队列 | ✅ 分区内有序 | ✅ 分区内有序 |
| 延迟消息 | ✅ 插件支持 | ❌ 不支持 | ✅ 原生支持 |
| 事务消息 | ✅ 支持 | ✅ 0.11+ 支持 | ✅ 原生支持 |
| 消息回溯 | ❌ 不支持 | ✅ 按 offset | ✅ 按时间/offset |
| 消息过滤 | ✅ 路由键 | ❌ 需客户端实现 | ✅ Tag/SQL92 |
| 死信队列 | ✅ 支持 | ❌ 需自行实现 | ✅ 支持 |
| 消息轨迹 | ✅ 插件支持 | ❌ 需自行实现 | ✅ 原生支持 |
| 消息优先级 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
可靠性保障
| 特性 | RabbitMQ | Kafka | RocketMQ |
|---|
| 消息持久化 | ✅ | ✅ | ✅ |
| 消息确认 | ACK 机制 | Offset 提交 | ACK 机制 |
| 数据副本 | 镜像队列/Quorum | ISR 副本机制 | 主从复制/Dledger |
| 自动故障转移 | ✅ 需配置 | ✅ 自动 | ✅ Dledger 模式 |
适用场景
| MQ | 适用场景 | 不适用场景 |
|---|
| RabbitMQ | 低延迟、复杂路由、企业集成、中小规模 | 超大规模日志、超高吞吐 |
| Kafka | 日志收集、大数据处理、流计算、事件溯源 | 复杂消息特性、延迟消息 |
| RocketMQ | 电商/金融、分布式事务、订单系统、延迟消息 | 超低延迟(微秒级)、纯日志收集 |
选型建议
需要低延迟 + 复杂路由 → RabbitMQ
需要超高吞吐 + 大数据 → Kafka
需要业务消息 + 事务支持 → RocketMQ
| 优先选择 | 场景描述 |
|---|
| RabbitMQ | 对延迟敏感、需要灵活路由、团队熟悉 AMQP |
| Kafka | 日志收集、实时数仓、流计算平台 |
| RocketMQ | 电商交易、金融业务、需要事务/延迟消息 |
核心概念
Producer(生产者)
消息的发送方,负责创建和发送消息。
Consumer(消费者)
消息的接收方,负责接收和处理消息。
Broker(代理/服务器)
消息队列服务端,负责存储和转发消息。
Topic(主题)
消息的分类,生产者发送消息到指定 Topic,消费者订阅 Topic 获取消息。
Queue(队列)
消息的存储容器,消息按顺序存入队列。
Message(消息)
传输的数据单元,包含消息头和消息体。
消息模式
点对点模式(P2P)
Producer → Queue → Consumer
一条消息只能被一个消费者消费。
发布订阅模式(Pub/Sub)
Producer → Topic → Consumer1
→ Consumer2
→ Consumer3
一条消息可以被多个消费者消费。