4. RabbitMQ-Exchange(交换机)

Exchange(交换机)

Exchange分发消息时根据类型的不同分发策略有区别,目前共四种类型:

  • direct:直接
  • fanout:广播,
  • topic:主题,就是发布订阅那种模式
  • headers :headers 匹配 AMQP 消息的 header 而不是路由键,headers 交换器和 direct 交换器完全一致,但性能差很多,目前几乎用不到了,所以直接看另外三种类

direct、header 是一致的,它们都是JMS中说的点对点通信方式实现

fanout、topic则是发布订阅的一些实现

交换机的类型不同,最终路由到的地方就不一样

创建一个交换机

你的ip:15672

4. RabbitMQ-Exchange(交换机)_第1张图片

创建一个队列

4. RabbitMQ-Exchange(交换机)_第2张图片

交换机绑定队列

4. RabbitMQ-Exchange(交换机)_第3张图片
4. RabbitMQ-Exchange(交换机)_第4张图片

一创建之后,点进交换机,交换机的绑定关系里面,就会发现已经与队列 indi 绑定上了

4. RabbitMQ-Exchange(交换机)_第5张图片

Direct Exchange(直接交换机)

它将消息直接交给一个指定的队列,路由键需要按照绑定关系精确匹配

4. RabbitMQ-Exchange(交换机)_第6张图片

比如,现在有一个直接交换机,它绑定了3个队列,第一个叫 dog,第二个叫 dog.gurad,第三个叫 dog.puppy,如果说消息发送过来,我们用的路由键叫 dog,那它就会精确的只发送给 dog 队列,实现消息最终只能到达一个队列,这就叫直接类型交换机,也称为单播模式、点对点通信

路由键是跟交换机和队列的绑定关系进行匹配的,我们将这种匹配称之为路由键的完全匹配

发消息是发给交换机,监听消息是监听队列,交换机将消息交给队列了,那么监听这个队列的人就会拿到消息

示例

先创建好交换机、队列,并建立绑定关系

4. RabbitMQ-Exchange(交换机)_第7张图片
4. RabbitMQ-Exchange(交换机)_第8张图片
4. RabbitMQ-Exchange(交换机)_第9张图片
4. RabbitMQ-Exchange(交换机)_第10张图片

4. RabbitMQ-Exchange(交换机)_第11张图片

Fanout Exchange(广播类型交换机)

4. RabbitMQ-Exchange(交换机)_第12张图片

如果交换机下绑定了3个队列,消息一到达交换机,这3个队列都会收到, 这个消息会广播出去,根本就不关心路由键是什么,把所有消息都通过交换机广播给它绑定的所有队列,被称为广播模式

示例

4. RabbitMQ-Exchange(交换机)_第13张图片
4. RabbitMQ-Exchange(交换机)_第14张图片
4. RabbitMQ-Exchange(交换机)_第15张图片
4. RabbitMQ-Exchange(交换机)_第16张图片

Topic Exchange(主题类型交换机)

4. RabbitMQ-Exchange(交换机)_第17张图片

虽然它也是广播模式,比如它绑定了几个交换机,但是它可以指定某些交换机来发送消息,其余没指定的,则不会收到消息,所以它是部分广播,主要是根据路由键匹配将消息发个队列,这就是主题-发布订阅模式

它将路由键和绑定键的字符串切分成单词,这些单词之间用点隔开。

它同样也会识别两个通配符:符号 “#” 和符号 “*”

# 匹配 0 个或多个单词

* 匹配一个单词

以上面的 usa.# 为例,所有 usa 开头的路由键会进入这个队列

而 #.news ,则是所有以 news 结尾的路由键会进入这个队列

Name:交换机名称

Type:交换机类型

Durability:Durable(持久化)/ Transient(临时)

Auto delete:是否自动删除,会在没有任何队列绑定它时自动删除

Internal:是否为内部交换机,如果是,客户端则无法给交换机发消息,可能只供转发路由使用

示例

4. RabbitMQ-Exchange(交换机)_第18张图片

4. RabbitMQ-Exchange(交换机)_第19张图片
4. RabbitMQ-Exchange(交换机)_第20张图片

4. RabbitMQ-Exchange(交换机)_第21张图片

4. RabbitMQ-Exchange(交换机)_第22张图片

在这里插入图片描述

你可能感兴趣的:(RabbitMQ,rabbitmq,交换机,队列)