当前位置: 首页 > article >正文

RabbitMQ入门6—exchange参数之type

在 RabbitMQ 中,exchange(交换机)是消息路由的核心组件,它根据某些规则将消息分发给绑定到它的队列。type 参数定义了交换机的 路由行为,决定消息如何从交换机路由到队列。

type 参数的作用

type 参数指定了交换机的类型,每种类型决定了交换机如何处理接收到的消息,并基于什么规则将消息路由到绑定的队列。RabbitMQ 支持以下四种主要的交换机类型:

  1. Direct Exchange
  2. Fanout Exchange
  3. Topic Exchange
  4. Headers Exchange

每种交换机类型有不同的消息路由逻辑,下面逐一进行详细介绍:


1. Direct Exchange

  • 描述direct 交换机根据完全匹配的 路由键(Routing Key) 将消息路由到队列。只有当队列的绑定键与消息的路由键完全一致时,消息才会被路由到相应的队列。

  • 使用场景:适用于精确匹配场景,通常用于单播或点对点消息传递。

  • 工作原理

    • 队列在绑定到 direct 交换机时,会指定一个绑定键(binding key)。
    • 当消息的路由键(routing key)和某个队列的绑定键完全一致时,消息才会被路由到这个队列。
  • 示例

    • 交换机的类型为 direct
    • 队列 queue_A 绑定了键 key_A
    • 如果消息的路由键是 key_A,则消息会被发送到 queue_A
err := ch.ExchangeDeclare(
    "direct_logs", // 交换机名称
    "direct",      // 交换机类型
    true,          // durable
    false,         // auto-deleted
    false,         // internal
    false,         // no-wait
    nil,           // 额外参数
)

2. Fanout Exchange

  • 描述fanout 交换机将消息广播到所有与该交换机绑定的队列,忽略路由键。每当有消息发布到 fanout 交换机时,它会将消息复制到所有绑定的队列。

  • 使用场景:适用于需要将同一消息发送到多个消费者的场景,通常用于广播消息。

  • 工作原理

    • 消息发送到 fanout 交换机后,交换机会将消息发送给所有绑定到它的队列,而不关心消息的路由键。
  • 示例

    • 交换机的类型为 fanout
    • 队列 queue_Aqueue_B 都绑定到该 fanout 交换机。
    • 无论消息的路由键是什么,消息都会同时发送到 queue_Aqueue_B
err := ch.ExchangeDeclare(
    "logs",    // 交换机名称
    "fanout",  // 交换机类型
    true,      // durable
    false,     // auto-deleted
    false,     // internal
    false,     // no-wait
    nil,       // 额外参数
)

3. Topic Exchange

  • 描述topic 交换机通过模式匹配的方式路由消息,基于通配符匹配路由键。它允许使用 *# 作为通配符来进行模糊匹配:

    • * 代表一个单词。
    • # 代表零个或多个单词。
  • 使用场景:适用于路由需要更复杂匹配规则的场景,比如日志系统、需要分类的消息处理系统。

  • 工作原理

    • 队列绑定到 topic 交换机时,会指定一个绑定键(binding key)。
    • 当消息的路由键和绑定键模式匹配时,消息会被路由到相应的队列。
  • 示例

    • 队列 queue_A 绑定了 binding key*.orange.*
    • 消息的路由键为 quick.orange.rabbit,符合绑定模式,因此消息会路由到 queue_A
err := ch.ExchangeDeclare(
    "topic_logs", // 交换机名称
    "topic",      // 交换机类型
    true,         // durable
    false,        // auto-deleted
    false,        // internal
    false,        // no-wait
    nil,          // 额外参数
)

4. Headers Exchange

  • 描述headers 交换机通过消息的 头部属性(Headers) 来路由消息,而不是通过路由键。它允许使用消息头部中的键值对来匹配队列绑定的条件。

  • 使用场景:适用于需要基于多维条件(头部属性)来路由消息的场景,通常用于需要高灵活性的消息传递。

  • 工作原理

    • 当队列绑定到 headers 交换机时,绑定时会指定一些头部键值对(如 { "x-match": "all", "key1": "value1", "key2": "value2" })。
    • x-match 可以是 all(要求所有头部键值对匹配)或 any(只要任意一个键值对匹配即可)。
    • 发送到 headers 交换机的消息会根据这些头部信息进行路由。
  • 示例

    • 队列 queue_A 绑定了 { "x-match": "all", "format": "pdf", "type": "report" }
    • 只有当消息的头部包含 format="pdf"type="report" 时,消息才会路由到 queue_A
err := ch.ExchangeDeclare(
    "header_logs", // 交换机名称
    "headers",     // 交换机类型
    true,          // durable
    false,         // auto-deleted
    false,         // internal
    false,         // no-wait
    nil,           // 额外参数
)

总结

  • Direct Exchange:精确匹配路由键,用于点对点通信。
  • Fanout Exchange:广播消息到所有绑定的队列,不关心路由键。
  • Topic Exchange:通过模式匹配(通配符)进行路由,适用于更复杂的路由需求。
  • Headers Exchange:基于消息头部进行路由,允许多条件匹配。

exchangetype 参数决定了消息在不同场景下的路由方式,选择合适的交换机类型可以让消息系统更加灵活、高效。


http://www.kler.cn/news/335721.html

相关文章:

  • 职场祛魅:判断2B企业和外包公司?
  • Windows 通过 Docker 安装 GitLab
  • 在VSCode中使用Excalidraw
  • 新版IDEA中Git的使用(四)——解决冲突
  • 面试题3-JDBC操作数据库的步骤
  • Java使用RabbitMQ的详细教程(原生框架)
  • 【FreeRTOS】移植教程与官方文档
  • Linux 系统五种帮助命令的使用
  • mysql UDF提权(实战案例)
  • vue源码解析(源码解析学习大纲)
  • 传统图像处理Opencv分割不同颜色的夹子
  • 面试题之- null和undefined的区别
  • 【api连接ChatGPT的最简单方式】
  • 常见的基础系统
  • OpenJudge | 置换选择排序
  • MySQL 8.0 新特性之自增变量持久化
  • GOME数据IDL处理
  • 大数据新视界 --大数据大厂之 DataFusion:超越传统的大数据集成与处理创新工具
  • FP7209: 用于紫外线消毒灯的 升压LED恒流驱动芯片
  • GO语言工程构建示例-mac和linux适用