您的位置:首页 > 游戏 > 游戏 > 建筑用模板多少钱一张_去哪里找需要推广的app_百度网址安全检测中心_网络的推广

建筑用模板多少钱一张_去哪里找需要推广的app_百度网址安全检测中心_网络的推广

2024/12/23 15:23:12 来源:https://blog.csdn.net/LONG_Yi_1994/article/details/142732084  浏览:    关键词:建筑用模板多少钱一张_去哪里找需要推广的app_百度网址安全检测中心_网络的推广
建筑用模板多少钱一张_去哪里找需要推广的app_百度网址安全检测中心_网络的推广

在 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,          // durablefalse,         // auto-deletedfalse,         // internalfalse,         // no-waitnil,           // 额外参数
)

2. Fanout Exchange

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

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

  • 工作原理

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

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

3. Topic Exchange

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

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

  • 工作原理

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

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

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,          // durablefalse,         // auto-deletedfalse,         // internalfalse,         // no-waitnil,           // 额外参数
)

总结

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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com