RabbitMQ的Exchange详解;

一、前言

RabbitMQ的Exchange,即交换机,是用来发送消息的AMQQP实体,通常交换机拿到一个消息之后,根据路由规则,路由到一个或零个队列;

二、Exchange的类型

AMQP 0-9-1 的代理提供了四种交换机:

在这里插入图片描述
除交换机类型外,在声明交换机时还可以附带许多其它数据,其中比较常用的是:

  • Name:交换机的名称
  • Durable:是否持久化(重启rabbitmq之后,交换机是否还存在)
  • AutoDelete:是否自动删除(当交换机把消息发送到与之绑定的消息队列后,是否删除交换机)

Direct Exchange

直连型交换机,是根据消息携带的路由键(routing key)将消息传递给对应绑定路由键的队列,它是如何工作的?

1)先声明一个队列和交换机,将一个队列绑定到交换机上,赋予该传输的路由规则(路由键),假设为R;
2)当一个携带路由键为R的消息被发送到直连型交换机时,交换机会根据携带的R,路由到对应队列;

正常情况下,直连交换机可以与多个不同的队列进行绑定,并发送消息到各个队列中。
比如:有2个队列Queue1和Queue2绑定同个交换机,并且路由规则相同,当有消息P发送到交换机时,此时2个队列都能接受到消息;

直连型交换机工作图:
在这里插入图片描述
Fanout Exchange

扇形交换机,是将消息路由到绑定此交换机的所有队列,而不理会绑定的路由键。比如有2个队列Queue1和Queue2绑定到某个扇形交换机上,当有消息发送给此扇型交换机时,交换机会将消息拷贝,分别发送给绑定的队列;

扇型交换机工作图:
在这里插入图片描述
Topic Exchange

主题交换机,可以说是直连交换机的升级版,直连交换机的路由规则比较严格,生产者发送的Routing Key必须与队列的Binding Key完全相匹配的时候,才能将消息传递给队列,但主题交换机的路由规则是一种模糊匹配,可以通过通配符来满足一部分路由规则;它的约定是:

  • routing key为一个句点号“.”分隔的字符串(我们将句点号“.”分隔开的每一段独立的字符串称为一个单词),如“stock.usd.nyse”、“nyse.vmw”、“quick.orange.rabbit”;
  • binding key与routing key一样也是句点号“.”分隔的字符串;
  • binding key中可以存在两种特殊字符“ * ”与“ # ”,用于做模糊匹配,其中“ * ”用于匹配一个单词,“ # ”用于匹配多个单词(可以是零个);

主题交换机工作图:
在这里插入图片描述
Headers Exchange

头交换机,不依赖于routing key与binding key的匹配规则来路由消息到队列中,而是根据发送的消息内容中的headers属性进行匹配;

  • 在绑定Queue和Exchange时指定一组键值对,当消息发送到Exchange时,RabbitMQ会取到该消息的headers(也是一个键值对的形式),对比其中的键值对是否完全匹配Queue和Exchange绑定时指定的键值对,匹配则将消息路由到该Queue,反之则不发送消息到该Queue;

此类型的Exchange没有用过,因此不做介绍;

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值