flowchart LR
A["❌ 同步调用问题"] --> B["🔗 系统紧耦合"]
B --> B1["一个系统故障\n影响所有调用方"]
A --> C["⏰ 响应延迟"]
C --> C1["调用链长\n响应时间长"]
A --> D["📈 无法应对突发流量"]
D --> D1["秒杀场景\n系统崩溃"]
A --> E["🧩 扩展困难"]
E --> E1["系统改造\n影响上下游"]
style A fill:#fff3e0
style B fill:#ffcdd2
style C fill:#ffcdd2
style D fill:#ffcdd2
style E fill:#ffcdd2
1.2 消息队列如何解决问题
flowchart LR
A["✅ 消息队列解决方案"] --> B["🔓 系统解耦"]
A --> C["⏱️ 异步处理"]
A --> D["📊 削峰填谷"]
A --> E["🔄 可扩展性"]
B --> B1["生产者和消费者\n无需互相等待"]
C --> C1["非阻塞通信\n提升吞吐量"]
D --> D1["高峰期消息积压\n低谷期慢慢消费"]
E --> E1["轻松增加\n消费者实例"]
style A fill:#fff3e0
style B fill:#c8e6c9
style C fill:#c8e6c9
style D fill:#c8e6c9
style E fill:#c8e6c9
1.3 消息队列的典型应用场景
场景
说明
示例
异步处理
将耗时操作异步化,提升系统响应
用户注册后发送邮件、短信
系统解耦
降低系统间依赖,提高灵活性
订单完成后通知库存、物流
流量削峰
缓解突发流量,保护系统
秒杀、抢购场景
日志处理
异步收集和汇总日志
ELK 日志系统
消息通知
实时推送通知
订单状态变更通知
1.4 同步 vs 异步对比
对比维度
同步调用
异步消息队列
响应时间
调用方需等待
立即返回
耦合度
高
低
可用性
依赖方全存活
消息持久化保证
扩展性
困难
容易
适用场景
强一致性需求
最终一致性需求
二、消息队列核心概念
2.1 消息队列架构图
flowchart TD
A["🏗️ 消息队列架构"] --> B["📤 Producer\n生产者"]
A --> C["📮 Broker\n消息中间件"]
A --> D["📥 Consumer\n消费者"]
A --> E["🗂️ Queue/Topic\n存储队列"]
B -->|"发送消息"| C
C -->|"存储消息"| E
E -->|"消费消息"| D
style A fill:#fff3e0
style B fill:#c8e6c9
style C fill:#e3f2fd
style D fill:#c8e6c9
style E fill:#fff3e0
2.2 核心概念详解
flowchart TD
A["📮 MQ 核心概念"] --> B["📤 Producer\n生产者"]
A --> C["📥 Consumer\n消费者"]
A --> D["📬 Broker\n消息服务器"]
A --> E["📁 Queue\n消息队列"]
A --> F["📰 Topic\n消息主题"]
A --> G["🔄 Message\n消息"]
B --> B1["产生消息\n发送消息"]
C --> C1["订阅消息\n处理消息"]
D --> D1["接收存储\n转发消息"]
E --> E1["FIFO 队列\n点对点"]
F --> F1["发布订阅\n广播模式"]
style A fill:#fff3e0
style B fill:#c8e6c9
style C fill:#c8e6c9
style D fill:#e3f2fd
style E fill:#fff3e0
style F fill:#f8bbd0
2.3 消息模型对比
点对点模型(Point-to-Point):
flowchart LR
A["📤 生产者"] --> B["📁 Queue"]
B --> C1["消费者1"]
B --> C2["消费者2"]
B --> C3["消费者3"]
style B fill:#fff3e0
style C1 fill:#c8e6c9
style C2 fill:#c8e6c9
style C3 fill:#c8e6c9
消息只能被一个消费者消费
消息消费后从队列中删除
典型实现:ActiveMQ、RabbitMQ(Queue)
发布订阅模型(Publish-Subscribe):
flowchart LR
A["📤 生产者"] --> B["📰 Topic\n消息主题"]
B --> C1["消费者1"]
B --> C2["消费者2"]
B --> C3["消费者3"]
style B fill:#f8bbd0
style C1 fill:#c8e6c9
style C2 fill:#c8e6c9
style C3 fill:#c8e6c9
消息可以被所有订阅的消费者消费
消息消费后仍然保留(可配置)
典型实现:Kafka、RocketMQ(Topic)
2.4 消息消费模式
模式
说明
特点
推模式(Push)
Broker 主动推送消息给消费者
实时性高,消费者压力大
拉模式(Pull)
消费者主动从 Broker 拉取消息
消费者控制节奏,可批量处理
三、主流消息队列对比
3.1 三大 MQ 对比
flowchart TD
A["📊 主流消息队列对比"] --> B["🐰 RabbitMQ"]
A --> C["📈 Kafka"]
A --> D["🚀 RocketMQ"]
B --> B1[" Erlang 开发\n Erlang 开发"]
B1 --> B2["✅ 功能丰富\n✅ 管理界面友好\n❌ 吞吐量有限"]
C --> C1[" Scala 开发\n( JVM 生态)"]
C1 --> C2["✅ 高吞吐量\n✅ 分布式\n❌ 功能相对简单"]
D --> D1[" Java 开发\n(阿里巴巴)"]
D1 --> D2["✅ 高吞吐\n✅ 事务消息\n✅ 延迟消息"]
style A fill:#fff3e0
style B fill:#c8e6c9
style C fill:#e3f2fd
style D fill:#f8bbd0
3.2 详细对比
对比维度
RabbitMQ
Kafka
RocketMQ
吞吐量
万级/秒
百万级/秒
十万级/秒
延迟
微秒级
毫秒级
毫秒级
消息可靠性
⭐⭐⭐
⭐⭐⭐
⭐⭐⭐⭐
事务消息
支持
支持
原生支持
延迟消息
支持
不支持
原生支持
顺序消息
支持
支持
支持
集群模式
主从
分布式
主从
管理界面
友好
一般
一般
社区活跃度
高
非常高
高
适用场景
业务消息
日志、大数据
电商交易
3.3 如何选择 MQ?
flowchart TD
A["🎯 MQ 选择指南"] --> B["业务消息\复杂功能"]
A --> C["日志收集\n大数据处理"]
A --> D["交易系统\n高可靠消息"]
B --> B1["🐰 RabbitMQ"]
B1 --> B2["功能丰富\n管理方便"]
C --> C1["📈 Kafka"]
C1 --> C2["高吞吐\n生态完善"]
D --> D1["🚀 RocketMQ"]
D1 --> D2["事务消息\n延迟消息"]
style A fill:#fff3e0
style B fill:#c8e6c9
style C fill:#e3f2fd
style D fill:#f8bbd0
四、RabbitMQ 详解
4.1 RabbitMQ 核心概念
flowchart TD
A["🐰 RabbitMQ 核心概念"] --> B["📤 Producer\n生产者"]
A --> C["🗂️ Exchange\n交换机"]
A --> D["📁 Queue\n队列"]
A --> E["📥 Consumer\n消费者"]
A --> F["🔗 Binding\n绑定"]
B -->|"发送消息"| C
C -->|"根据路由键"| D
D -->|"消息投递"| E
B -.->|"管理"| F
style A fill:#fff3e0
style B fill:#c8e6c9
style C fill:#f8bbd0
style D fill:#fff3e0
style E fill:#c8e6c9
flowchart TD
A["📈 Kafka 核心概念"] --> B["📤 Producer\n生产者"]
A --> C["🗂️ Broker\n消息服务器"]
A --> D["📰 Topic\n消息主题"]
A --> E["📁 Partition\n分区"]
A --> F["📥 Consumer\n消费者"]
A --> G["📊 Consumer Group\n消费组"]
B -->|"发送消息"| D
D -->|"存储分区"| E
E -->|"消费"| F
F -->|"组成"| G
style A fill:#fff3e0
style B fill:#c8e6c9
style C fill:#e3f2fd
style D fill:#f8bbd0
style E fill:#fff3e0
style F fill:#c8e6c9
style G fill:#e3f2fd
5.2 Kafka 架构图
flowchart LR
A["📈 Kafka 集群架构"] --> B["Zookeeper/KRaft"]
A --> C["Broker 1\n(Leader)"]
A --> D["Broker 2\n(Follower)"]
A --> E["Broker 3\n(Follower)"]
C --> F["Topic: order\nPartitions: 3"]
D --> G["Topic: order\nPartitions: 3"]
E --> H["Topic: order\nPartitions: 3"]
style A fill:#fff3e0
style C fill:#e3f2fd
flowchart TD
A["🚀 RocketMQ 核心概念"] --> B["📤 Producer\n生产者"]
A --> C["🗂️ Broker\n消息服务器"]
A --> D["📰 Topic\n消息主题"]
A --> E["📥 Consumer\n消费者"]
A --> F["📋 NameServer\n名字服务"]
B -->|"注册/查找"| F
F -->|"路由信息"| C
style A fill:#fff3e0
style F fill:#f8bbd0
flowchart TD
A["❓ 常见问题"] --> B["📭 消息丢失"]
A --> C["🔄 消息重复"]
A --> D["⏰ 消息延迟"]
A --> E["💥 消费积压"]
B --> B1["开启确认机制\n持久化消息"]
C --> C1["实现幂等性\n防重处理"]
D --> D1["优化消费逻辑\n增加消费者"]
E --> E1["增加消费者\n优化网络"]
style A fill:#fff3e0
flowchart LR
A["MQ 学习路线"] --> B["第一阶段\n基础概念"]
B --> C["第二阶段\nRabbitMQ"]
C --> D["第三阶段\nKafka"]
D --> E["第四阶段\nRocketMQ"]
B --> B1["核心概念\n消息模型"]
C --> C1["Exchange\n队列绑定\n确认机制"]
D --> D1["分区副本\n消费组\n高吞吐"]
E --> E1["事务消息\n延迟消息"]
style A fill:#fff3e0
style B fill:#e3f2fd
style C fill:#c8e6c9
style D fill:#fff3e0
style E fill:#f8bbd0