RabbitMQ学习专题(三)交换机

发布于:2025-07-04 ⋅ 阅读:(19) ⋅ 点赞:(0)

目录

一、三种交换机模式

核心区别对比​​

​​2. 详细说明​​

​​(1) 广播模式(Fanout)​​

​​(2) 路由模式(Direct)​​

​​(3) 主题模式(Topic)​​

​​3. 不同消息队列的实现​​

​​4. 如何选择?​​

5.java代码实现(生产者)

​​总结​​

二、RabbitMQ对应的工作模式

​​1. 简单模式(Simple)​​

​​2. 工作队列模式(Work Queue)​​

​​3. 发布/订阅模式(Pub/Sub)​​

​​4. 路由模式(Routing)​​

​​5. 通配符模式(Topics)​​

​​三、总结对应关系​​


一、三种交换机模式

核心区别对比​

​特性​ ​广播模式(Fanout)​ ​路由模式(Direct)​ ​主题模式(Topic)​
​路由规则​ 无条件复制到所有绑定队列 精确匹配 Routing Key 通配符匹配 Routing Key*/#
​消息分发​ 1:N(所有消费者收到相同消息) 1:1 或 1:N(相同 Key 的队列) M:N(灵活匹配多个队列)
​典型应用场景​ 系统通知、多服务数据同步 任务分发、精确路由(如支付处理) 分类事件(如日志分级、新闻订阅)
​Exchange 类型​ Fanout Exchange(RabbitMQ) Direct Exchange Topic Exchange
​Routing Key​ 忽略 必须完全匹配 支持通配符(如 news.*

​2. 详细说明​

​(1) 广播模式(Fanout)​
  • ​核心逻辑​​:
    消息发送到 Fanout Exchange 后,会​​无条件复制到所有绑定的队列​​,消费者订阅不同队列时会收到相同消息。
  • ​示例场景​​:
    • 系统公告:一条消息需同时触发邮件、短信、日志服务。
    • 数据同步:订单创建后广播给库存、物流、分析服务。
  • ​特点​​:
    • 简单粗暴,无过滤逻辑。
    • 性能开销较大(消息全量复制)。
​(2) 路由模式(Direct)​
  • ​核心逻辑​​:
    消息通过精确的 Routing Key 匹配到指定队列,只有绑定相同 Key 的消费者能收到消息。
  • ​示例场景​​:
    • 支付处理:routing_key=payment.success 仅路由到支付服务队列。
    • 任务分发:多个 worker 竞争消费同一队列(工作队列模式)。
  • ​特点​​:
    • 精准控制消息接收方。
    • 灵活性较低(需提前定义 Key)。
​(3) 主题模式(Topic)​
  • ​核心逻辑​​:
    通过通配符(* 匹配一个单词,# 匹配多级)动态匹配 Routing Key,实现灵活的路由。
  • ​示例场景​​:
    • 日志分级:log.error 路由到告警服务,log.info 路由到存储服务。
    • 新闻订阅:用户订阅 news.sports 或 news.weather
  • ​特点​​:
    • 兼顾广播的覆盖范围和路由的精确性。
    • 适合多维度、分层级的消息分类。

​3. 不同消息队列的实现​

​MQ 类型​ ​广播模式​ ​路由模式​ ​主题模式​
​RabbitMQ​ Fanout Exchange Direct Exchange Topic Exchange
​Kafka​ 多个 Consumer Group 独立消费 单 Partition 或 Key 路由 Topic + 通配符订阅
​RocketMQ​ 广播消费(Broadcasting) Tag 过滤(精确匹配) Tag 过滤(通配符支持)

​4. 如何选择?​

  • ​需要无条件广播?​​ → ​​Fanout​​(如全量数据同步)。
  • ​需要精确路由?​​ → ​​Direct​​(如支付结果处理)。
  • ​需要动态分类?​​ → ​​Topic​​(如日志分级、多维度事件)。

5.java代码实现(生产者)

​总结​

  • ​广播模式​​:简单粗暴,适合全覆盖场景。
  • ​路由模式​​:精准控制,适合点对点或任务分发。
  • ​主题模式​​:灵活匹配,适合复杂分类和订阅需求。

二、RabbitMQ对应的工作模式

​1. 简单模式(Simple)​

  • ​对应机制​​:
    • 交换机类型​​:默认使用​​默认交换机("",无名交换机)​​,类型为direct
    • ​特点​​:生产者直接将消息发送到队列(通过默认交换机绑定队列),消费者从队列中读取消息。
    • ​关系​​:无需显式声明交换机,消息通过队列名直接路由(routing_key = 队列名)。

​2. 工作队列模式(Work Queue)​

  • ​对应机制​​:
    • 交换机类型​​:同样使用​​默认交换机​​(direct)。
    • ​特点​​:多个消费者共享一个队列,消息以轮询(Round-Robin)或公平分发的方式分配给消费者。
    • ​关系​​:与简单模式类似,但通过多个消费者实现负载均衡。交换机类型不直接影响分发逻辑(由队列自身管理)。

​3. 发布/订阅模式(Pub/Sub)​

  • ​对应机制​​:
    • 交换机类型​​:必须使用​fanout交换机​​。
    • ​特点​​:消息会被广播到所有绑定的队列(每个队列的消费者都会收到相同消息)。
    • ​关系​​:fanout交换机忽略routing_key,直接将消息复制到所有绑定的队列,实现广播。

​4. 路由模式(Routing)​

  • ​对应机制​​:
    • 交换机类型​​:必须使用​direct交换机​​。
    • ​特点​​:消息根据routing_key精确匹配队列,只有匹配的队列会接收消息。
    • ​关系​​:direct交换机通过routing_key的完全匹配决定消息路由,适合定向分发。

​5. 通配符模式(Topics)​

  • ​对应机制​​:
    • 交换机类型​​:必须使用​topic交换机​​。
    • ​特点​​:消息根据routing_key的模式匹配(支持通配符*#)分发到队列。
    • ​关系​​:topic交换机通过灵活的路由规则实现部分匹配,适合多维度条件路由。

​三、总结对应关系​

​模式名称​ ​对应Exchange类型​ ​Routing Key规则​ ​分发逻辑​
简单模式 (无,直连队列) 队列名作为隐式Key 1:1点对点
工作队列模式 Direct(隐式) 队列名作为隐式Key 1:N竞争消费
发布/订阅模式 Fanout 忽略 1:N广播
路由模式 Direct 精确匹配 1:1或1:N(相同Key)
通配符模式 Topic *#通配符 M:N动态匹配

网站公告

今日签到

点亮在社区的每一天
去签到