RabbitMQ--基础--03--交换机的类型
RabbitMQ–基础–03–交换机的类型
1、常用的交换机类型
- fanout
- direct
- topic
- headers。
2、fanout
- 广播,将消息交给所有绑定到交换机的队列
- 无视 BindingKey,Routing Key
3、direct
- 定向,把消息交给符合指定 routing key 的队列
- 只有当Routing Key和Binding Key完全匹配的时候,消息队列才可以获取消息
- Direct是Exchange的默认模式
- RabbitMQ有个默认交换机,名字是空字符串,类型是Direct,绑定到所有的Queue 每一个Queue和 默认交换机 进行绑定,Binding Key是Queue的名字,所以,有时候我们感觉不需要交换器也可以发送和接收消息,但是实际上是使用了RabbitMQ的默认交换机
3.1、案例说明
- 交换机的类型为 direct
- 如果在发送消息时,设置路由键为 warning,则消息会路由到 Q1、Q2
- 如果在发送消息时,设置路由键为 info,则消息会路由到 Q2、Q3
- 如果在发送消息时,设置路由键为 debug,则消息只会路由到 Q3
4、topic
- topic类型的交换机 实际上是 direct类型的交换机的一种 都将消息路由到 BindingKey 和 RoutingKey 相匹配的队列中 topic 在匹配规则上进行了扩展。使用了通配符
- 工作流程 消息生产者生产消息,把消息交给交换机 exchange 交换机 exchange 根据 key 的规则模糊匹配到对应的队列,由队列的监听消费者接收消息消费
4.1、匹配规则
4.1.1、RoutingKey
- 为一个点号 “.” 分割的字符串,被点号 “.” 分割开的每一段独立的字符串成为一个单词。
- 举例:com.rabbitmq.client、java.util.concurrent
4.1.2、BindingKey
- RountingKey一样,也是点号 “.” 分割的字符串
- BindingKey存在两种特殊的字符串,用于做模糊匹配 “*” :用于匹配一个单词 “#” :用于匹配多个单词(可以是零个)。
4.1.3、BindingKey模糊匹配案例
- com.#:可以匹配:com.zzc.java、com.zzc等
- com.*:可以匹配:com.zzc、com.java 等
4.2、Topic 模型
- 路由键为 com.rabbitmq.client 的消息,会同时路由到 Q1、Q2、Q3
- 路由键为 com.hidden.client 的消息,会路由到 Q2、Q3
- 路由键为 com.hidden.demo 的消息,会路由到 Q3
- 路由键为 java.util.concurrent 的消息,会被丢弃或者返回给生产者,因为,它没有匹配任何路由键
5、headers
- header模式取消routingkey,使用header中的 key/value(键值对)匹配队列
- 在绑定队列和交换机时,制定一组key/value(键值对),当发送消息到交换机时,RabbitMQ 会获取到该消息的 headers,对比其中的键值对是否完全匹配队列和交换机绑定时指定的键值对。 如果完全匹配,则消息会路由到该队列 否则,不会路由到该队列
- headers 类型的交换机性能会很差,而且也不实用,基本不会看到它的存在。