RabbitMQ 三种 Exchange 模式

RabbitMQ 三种 Exchange 模式

RabbitMQ 中的 Exchange(交换机)负责接收生产者发送的消息,并根据类型将消息路由到相应的队列。常见的三种 Exchange 类型如下:


1. Direct Exchange(直连模式) #

✅ 特点: #

  • 根据消息的 routing key 精确匹配,将消息路由到绑定了 相同 routing key 的队列。

🎯 适用场景: #

  • 一对一消息传递。
  • 多个队列分别订阅不同的消息类型。

📌 示例: #

绑定情况:

  • Queue A 绑定 routing key:error
  • Queue B 绑定 routing key:info

发送消息:

  • Producer 发送消息,routing key 为 error

结果:

  • 只有 Queue A 会接收到该消息。

2. Fanout Exchange(广播模式) #

✅ 特点: #

  • 忽略 routing key
  • 所有绑定到该 Exchange 的队列都会收到消息。

🎯 适用场景: #

  • 广播场景,例如系统通知、群发消息。

📌 示例: #

绑定情况:

  • Queue A、Queue B 都绑定到同一个 fanout Exchange

发送消息:

  • Producer 发送任意消息(routing key 无效)

结果:

  • Queue A 和 Queue B 都会接收到该消息。

3. Topic Exchange(主题模式) #

✅ 特点: #

  • 支持 通配符 匹配 routing key:
    • *:匹配一个单词(以 . 分隔)
    • #:匹配零个或多个单词

🎯 适用场景: #

  • 灵活的订阅机制,如日志系统、新闻推送等。

📌 示例: #

绑定情况:

  • Queue A 绑定 routing key:*.error
  • Queue B 绑定 routing key:log.#

发送消息:

  • Producer 发送 routing key:app.error → Queue A 接收
  • Producer 发送 routing key:log.system.info → Queue B 接收

🧾 模式对比表 #

Exchange 类型Routing Key 是否参与路由匹配方式典型应用场景
Direct✅ 是精确匹配精准路由,分类消息
Fanout❌ 否广播系统通知,全员推送
Topic✅ 是通配符匹配(*/#日志订阅,事件分发