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

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


1、常用的交换机类型

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

2、fanout

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

RabbitMQ--基础--03--交换机的类型_第1张图片

RabbitMQ--基础--03--交换机的类型_第2张图片

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

RabbitMQ--基础--03--交换机的类型_第3张图片

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 的消息,会被丢弃或者返回给生产者,因为,它没有匹配任何路由键

RabbitMQ--基础--03--交换机的类型_第4张图片

5、headers

  1. header模式取消routingkey,使用header中的 key/value(键值对)匹配队列
  2. 在绑定队列和交换机时,制定一组key/value(键值对),当发送消息到交换机时,RabbitMQ 会获取到该消息的 headers,对比其中的键值对是否完全匹配队列和交换机绑定时指定的键值对。
    1. 如果完全匹配,则消息会路由到该队列
    2. 否则,不会路由到该队列
  3. headers 类型的交换机性能会很差,而且也不实用,基本不会看到它的存在。

你可能感兴趣的:(RabbitMQ,java-rabbitmq,rabbitmq,分布式)