上一篇我们介绍了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 模式发送消息,发送速度较快;
=》例如指定了路由键是pig,那么只有与exchange绑定并且路由键为pig的队列才会收到消息。
扫描二维码关注公众号,回复:
12696885 查看本文章
3.3 Topic Exchange (匹配/订阅模式)
- 工作原理:与Direct Exchange基本相同,唯一区别在于路由键。Topic exchange 的路由键可以去进行模糊匹配,匹配规则:
- * 表示单个模糊匹配。例如,路由键是 *.apple.big 则表示第一个单词可以是任意的,只需后边单词完全匹配即可。
- # 表示单个或多个模糊匹配。例如,路由键是 #.little ,那么发送消息的路由键可以是 green,apple,little,也就是说前面的单词是任意的。
- 特点:路由键匹配,发送消息速度较快;
=》注:这种情况下队列会收到所有路由器中符合topic规则的消息。
3.4 Headers exchange (报头模式)
- 工作原理:
- 标头交换设计用于在多个属性上进行路由,这些属性比路由关键字更容易表示为邮件标头。报头交换忽略路由键属性。相反,用于路由的属性取自Headers属性。如果标头的值等于绑定时指定的值,则认为消息匹配。
- 可以使用多个报头进行匹配,将队列绑定到报头交换。在这种情况下,代理需要来自应用程序开发人员的另一条信息,即,它是应该考虑任何头匹配的消息,还是应该考虑所有头匹配的消息?这就是“x-Match”绑定参数的用途。当“x-Match”参数设置为“any”时,只有一个匹配的标头值就足够了。或者,将“x-Match”设置为“all”要求所有值必须匹配。
- 标题交换可以被视为“direct exchanges on steroids”。因为它们基于标头值进行路由,所以它们可以用作直接交换,其中路由关键字不必是字符串;例如,它可以是integer 整数或hash 散列(dictionary字典)。
- 特点:忽略路由键属性,可以使用多个报头进行匹配,发送消息速度较快;
以上就是对Exchange交换机类型介绍,根据自己的业务场景结合,选择合适的交换机类型实现业务处理;