好的,阿杰,我们来整理一下 RabbitMQ 的五种主要消息模型,包括概念、适用场景、特点和示意图说明。


1️⃣ 简单队列模型(Simple Queue / Work Queue)

概念

  • 最基础的消息队列模型
  • 一个生产者,一个队列,多个消费者
  • 队列中的消息被一个消费者消费(竞争消费)

特点

  • 消息只能被一个消费者消费
  • 消费者处理能力可通过增加实例扩展

应用场景

  • 异步任务处理
  • 后台任务分发

示意图

Producer ---> Queue ---> Consumer1
                       Consumer2
                       Consumer3

2️⃣ 发布/订阅模型(Fanout Exchange / Pub-Sub)

概念

  • 生产者发送消息到 Exchange
  • Exchange 将消息广播到绑定的多个队列
  • 每个队列的消费者都能收到消息

特点

  • 广播模式
  • 消费者之间互相独立
  • 不关心队列数量,Exchange 会自动分发

应用场景

  • 消息广播
  • 日志推送
  • 多系统同时接收同一条消息

示意图

          +------Queue1------> Consumer1
Producer -> Exchange (fanout)
          +------Queue2------> Consumer2
          +------Queue3------> Consumer3

3️⃣ 路由模型(Direct Exchange / Routing)

概念

  • 生产者发送消息到 Direct Exchange
  • Exchange 根据 Routing Key 将消息路由到指定队列

特点

  • 精确路由
  • 消息只发送给匹配的队列

应用场景

  • 按类型发送消息
  • 分类通知、指令分发

示意图

Producer --key: info--> Queue1 --> Consumer1
Producer --key: error--> Queue2 --> Consumer2

4️⃣ 主题模型(Topic Exchange)

概念

  • 类似 Direct Exchange,但路由键可以使用 通配符
    • * 匹配一个单词
    • # 匹配多个单词
  • 适用于更灵活的消息路由

特点

  • 灵活匹配
  • 多对多路由

应用场景

  • 按业务模块、地域、等级分类消息
  • 日志系统、事件订阅

示意图

Routing Key: user.create
Topic Exchange --> Queue1 (user.*) --> Consumer1
                 Queue2 (#.create) --> Consumer2

5️⃣ 延迟/死信队列模型(Delay / Dead Letter Queue)

概念

  • 消息过期或被拒绝后,发送到 死信队列(DLQ)
  • 可以实现消息延迟处理、定时任务

特点

  • 消息可延迟消费
  • 可做重试、超时处理

应用场景

  • 延迟队列
  • 订单超时未支付取消
  • 消息重试机制

示意图

Producer --> Queue (TTL) --> Dead Letter Exchange --> Dead Letter Queue --> Consumer

🔑 总结

模型作用消息分发方式典型场景
简单队列异步任务单一队列,竞争消费后台任务处理
发布/订阅广播消息Exchange 广播到多个队列日志、广播通知
路由精确路由根据 Routing Key 发送到指定队列分类指令、通知
主题模糊路由通配符匹配 Routing Key模块化事件订阅
延迟/死信延迟/重试TTL + DLQ 机制延迟任务、订单超时处理