当前位置:   article > 正文

RabbitMQ--基础--03--交换机的类型_rabbitmq routekey 模糊匹配

rabbitmq routekey 模糊匹配

RabbitMQ–基础–03–交换机的类型


1、常用的交换机类型

  1. fanout
  2. direct
  3. topic
  4. headers。

2、fanout

  1. 广播,将消息交给所有绑定到交换机的队列
  2. 无视 BindingKey,Routing Key
  3. Fanout交换机转发消息是最快的

在这里插入图片描述

在这里插入图片描述

3、direct

  1. 定向,把消息交给符合指定 routing key 的队列
  2. 只有当Routing Key和Binding Key完全匹配的时候,消息队列才可以获取消息
  3. Direct是Exchange的默认模式
  4. RabbitMQ有个默认交换机,名字是空字符串,类型是Direct,绑定到所有的Queue
    1. 每一个Queue和 默认交换机 进行绑定,Binding Key是Queue的名字,所以,有时候我们感觉不需要交换器也可以发送和接收消息,但是实际上是使用了RabbitMQ的默认交换机

3.1、案例说明

  1. 交换机的类型为 direct
  2. 如果在发送消息时,设置路由键为 warning,则消息会路由到 Q1、Q2
  3. 如果在发送消息时,设置路由键为 info,则消息会路由到 Q2、Q3
  4. 如果在发送消息时,设置路由键为 debug,则消息只会路由到 Q3

在这里插入图片描述

4、topic

  1. topic类型的交换机 实际上是 direct类型的交换机的一种
    1. 都将消息路由到 BindingKey 和 RoutingKey 相匹配的队列中
    2. topic 在匹配规则上进行了扩展。使用了通配符
  2. 工作流程
    1. 消息生产者生产消息,把消息交给交换机 exchange
    2. 交换机 exchange 根据 key 的规则模糊匹配到对应的队列,由队列的监听消费者接收消息消费

4.1、匹配规则

4.1.1、RoutingKey

  1. 为一个点号 “.” 分割的字符串,被点号 “.” 分割开的每一段独立的字符串成为一个单词。
  2. 举例:com.rabbitmq.client、java.util.concurrent

4.1.2、BindingKey

  1. RountingKey一样,也是点号 “.” 分割的字符串
  2. BindingKey存在两种特殊的字符串,用于做模糊匹配
    1. “*” :用于匹配一个单词
    2. “#” :用于匹配多个单词(可以是零个)。

4.1.3、BindingKey模糊匹配案例

  1. com.#:可以匹配:com.zzc.java、com.zzc等
  2. com.*:可以匹配:com.zzc、com.java 等

4.2、Topic 模型

  1. 路由键为 com.rabbitmq.client 的消息,会同时路由到 Q1、Q2、Q3
  2. 路由键为 com.hidden.client 的消息,会路由到 Q2、Q3
  3. 路由键为 com.hidden.demo 的消息,会路由到 Q3
  4. 路由键为 java.util.concurrent 的消息,会被丢弃或者返回给生产者,因为,它没有匹配任何路由键

在这里插入图片描述

5、headers

  1. header模式取消routingkey,使用header中的 key/value(键值对)匹配队列
  2. 在绑定队列和交换机时,制定一组key/value(键值对),当发送消息到交换机时,RabbitMQ 会获取到该消息的 headers,对比其中的键值对是否完全匹配队列和交换机绑定时指定的键值对。
    1. 如果完全匹配,则消息会路由到该队列
    2. 否则,不会路由到该队列
  3. headers 类型的交换机性能会很差,而且也不实用,基本不会看到它的存在。
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/708341
推荐阅读
相关标签
  

闽ICP备14008679号