| 作用 | 说明 | 示例场景 |
|---|---|---|
| 解耦 | 生产者和消费者独立演进 | 订单系统与库存系统解耦 |
| 异步 | 非核心流程异步处理 | 注册后异步发送邮件 |
| 削峰 | 平滑处理流量高峰 | 秒杀请求写入队列慢慢消费 |
同步调用:
用户 → 订单服务 → 库存服务 → 积分服务 → 通知服务 → 响应
(任一服务慢或失败,整体受影响)
异步解耦:
用户 → 订单服务 → 响应
↓
消息队列
↙ ↓ ↘
库存服务 积分服务 通知服务
优点:
缺点:
| 特性 | Kafka | RabbitMQ | RocketMQ |
|---|---|---|---|
| 开发语言 | Scala/Java | Erlang | Java |
| 吞吐量 | 百万级 | 万级 | 十万级 |
| 延迟 | 毫秒级 | 微秒级 | 毫秒级 |
| 消息可靠性 | 高 | 高 | 高 |
| 事务消息 | 支持 | 支持 | 原生支持 |
| 延迟消息 | 不支持 | 支持(插件) | 原生支持 |
| 消息顺序 | Partition 内有序 | 队列内有序 | 队列内有序 |
| 消息回溯 | 支持 | 不支持 | 支持 |
| 适用场景 | 日志、大数据、流处理 | 业务消息、复杂路由 | 电商、金融、业务消息 |
选型建议:
点对点模型(P2P):
生产者 → Queue → 消费者
↘ 消费者(竞争消费)
发布订阅模型(Pub/Sub):
生产者 → Topic → 订阅者1
→ 订阅者2
→ 订阅者3