RabbitMQ各种Exchange交换机类型介绍

上一篇我们介绍了RabbitMQ的【核心概念和AMQP协议】,RabbitMQ 是 AMQP(高级消息队列协议)的标准实现:

接下来我们具体的认识下 Exchange (交换机)的作用以及类型有哪些?

1 & Exchange的作用

AMQP 协议中的核心思想就是生产者和消费者的解耦,而Exchange的主要作用还是为了解耦,生产者不直接将消息投递给队列,而是将消息投递给Exchange,然后Exchange根据相应的路由规则投递给队列,最后队列将消息投递到消费者。

举个例子:

  • 寄件人(生产者/Publisher),快递公司(交换机/Exchange),快递员(队列/Queue),收货人(消费者/Consumer),物品/货物(消息数据/Message),填写寄件单信息(路由分发规则/Routing key
  • 寄件人把物品运动到快递公司,快递公司接到货后,依据填写寄件单的信息,将物品打包装箱后分配给快递员,快递员携带物品并根据上面填写的信息运送,最后送达目标收货人手中。

2 & Exchange的属性

  • Name:交换机名称;
  • Type:交换机类型 direct、topic、fanout、headers
  • Durability:是否需要持久化,true 为持久化;
  • Auto Delete:当最后一个绑定到 Exchange 上的队列删除后,自动删除该 Exchange;
  • Internal:当前 Exchange 是否用于 RabbitMQ 内部使用,默认为 false;
  • Arguments:扩展参数,用于扩展 AMQP 协议自制定化使用;

3 & Exchange的类型

3.1 Fanout Exchange(广播模式)

  • 工作原理:Fanout Exchange 比较特殊,会忽略路由键的设置,只需要简单的将队列绑定到交换机,直接将 1个 Message 广播到所有绑定的 Queue 中。很像子网广播,每台子网内的主机都获得了一份复制的消息。
  • 特点:Fanout 交换机转会忽略路由键的设置,发送消息速度最快。 

 

3.2 Direct Exchange (路由推送模式)

  • 工作原理:Direct Exchange 将 Exchange 和 Queue(队列)绑定同时指定路由键,在发消息的时候也需要指定路由键,且路由键必须要完全一致。
  • 特点:设置路由键,Point to point 模式发送消息,发送速度较快;

生产者将消息发送到 direct 交换器,在绑定队列和交换器的时候有一个路由 key,生产者发送的消息会指定一个路由 key,那么消息只会发送到相应key相同的队列,接着监听该队列的消费者消费消息。

也就是让消费者有选择性的接收消息。

=》例如指定了路由键是 pig,那么只有与 exchange 绑定并且路由键为 pig 的队列才会收到消息。

 

3.3 Topic Exchange (主题[模糊]匹配/订阅模式)

  • 工作原理:与 Direct Exchange 基本相同,唯一区别在于路由键。Topic exchange 的路由键可以去进行模糊匹配,匹配规则:
  1. *  表示单个模糊匹配。例如,路由键是   *.apple.big  则表示第一个单词可以是任意的,只需后边单词完全匹配即可。
  2. #  表示单个或多个模糊匹配。例如,路由键是 #.little ,那么发送消息的路由键可以是 green,apple,little,也就是说前面的单词是任意的。
  • 特点:路由键模糊匹配,发送消息速度较快;

   =》注:这种情况下队列会收到所有路由器中符合topic规则的消息。

 

3.4 Headers exchange (报头模式)

  • 工作原理
  1. 标头交换设计用于在多个属性上进行路由,这些属性比路由关键字更容易表示为邮件标头。报头交换忽略路由键属性。相反,用于路由的属性取自Headers属性。如果标头的值等于绑定时指定的值,则认为消息匹配。
  2. 可以使用多个报头进行匹配,将队列绑定到报头交换。在这种情况下,代理需要来自应用程序开发人员的另一条信息,即,它是应该考虑任何头匹配的消息,还是应该考虑所有头匹配的消息?这就是“x-Match”绑定参数的用途。当“x-Match”参数设置为“any”时,只有一个匹配的标头值就足够了。或者,将“x-Match”设置为“all”要求所有值必须匹配。
  3. 标题交换可以被视为“direct exchanges on steroids”。因为它们基于标头值进行路由,所以它们可以用作直接交换,其中路由关键字不必是字符串;例如,它可以是integer 整数或hash 散列(dictionary字典)。
  • 特点:忽略路由键属性,可以使用多个报头进行匹配,发送消息速度较快;

 

4 & 交换机参与队列的工作方式

以上几种交换机类型在实际使用情况中,使用最多的(可能)是最后一种主题[模糊]匹配/订阅模式,通过模糊匹配,使得操作更加自如。那么我们总结一下有交换器参与的队列工作方式如下:

  • 生产者:1.建立与 RabbitMQ 的连接/Connections  =》2.获取信道/Channels =》3.申明交换机类型/Exchange Type =》4. 创建消息/Message =》5. 发布消息 =》6. 关闭信道/Close Channels =》7. 关闭连接/Close Connections
  • 消费者:1.建立与 RabbitMQ 的连接/Connections  =》2.获取信道/Channels =》3.申明交换机类型/Exchange Type =》4. 申明队列/Queue =》5. 把队列和交换机绑定/Binding =》6. 消费消息/Massage =》 7. 关闭信道/Close Channels =》8. 关闭连接/Close Connections

以上就是对Exchange交换机类型介绍,根据自己的业务场景结合,选择合适的交换机类型实现业务处理;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChaITSimpleLove

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值