目标:
了解RabbitMQ的核心概念
学习步骤:
1、模型概念2、Producer (生产者) 、 Consumer(消费者)
3、Exchange (交换机)
4、Queue (消息队列)
5、Broker(服务节点)
6、RabbitMQ的五种工作模式
一、模型概念
说白了,RabbitMQ 就是一个生产者与消费者模型,其功能主要是【接收、存储和转发消息】,也可以称为一个使用队列来通信的组件。
二、 Producer(生产者) 、 Consumer(消费者)
Producer(生产者) :顾名思义是生产消息的一方
Consumer(消费者) :顾名思义是消费消息的一方
而消息一般由 俩部分组成:消息头(标签 Label)和 消息体(payload)。
消息体也叫 payLoad
,其内容是不外传的。
而消息头则由一系列的可选属性组成,这些属性包括
- routing-key(路由键)
- priority(优先级)
- delivery-mode(用于做消息持久化)。
Producer 把消息交由 RabbitMQ 后,RabbitMQ 会根据消息头把消息发送给合适的 Consumer
三、Exchange(交换机)
生产者发送的消息都需要经过交换机才能到达合适
的消费者,且交换机只负责转发消息,不具备存储消息的能力,假设没有任何队列与交换机绑定,或者没有符合路由规则的队列,发的消息就很可能会丢失。
说细节一点的话就是 Exchange用来接收生产者发送的消息并将这些消息路由给服务器中的队列中,如果找不到对应的路由
- 情况一是:消息返回给 Producer。
- 情况二是:消息直接被丢弃掉 。
关于Exchange 有4种类型,不同的类型对应着不同的路由策略,分别是:
-
direct (定向,也叫路由模式 - 默认)
- 交换机 会把消息 路由到那些 Bindingkey 与 RoutingKey 完全匹配的 Queue 中
- 应用场景:direct 类型常用在处理有优先级的任务,根据任务的优先级把消息发送到对应的队列,这样可以指派更多的资源去处理高优先级的队列。
-
fanout (广播,也称订阅模式)
- 交换机 会把所有发送到该 Exchange的消息 路由到所有与它绑定的Queue中,fanout 类型是所有的交换机类型里面速度最快的
- 交换机 会把所有发送到该 Exchange的消息 路由到所有与它绑定的Queue中,fanout 类型是所有的交换机类型里面速度最快的
-
topic (通配)
- topic类型的交换机在匹配规则上进行了扩展,RoutingKey 为一个点号“.”分隔的字符串,BindingKey 也是点号“.”分隔的字符串
- BindingKey 中有两种特殊字符串
*
和#
,用于模糊匹配,其中*
用于匹配一个单词,#
用于匹配零个或多个单词
-
headers (参数匹配)
- 它不依赖于路由键的匹配规则来路由消息 ,而是根据发送的消息内容中的 headers 属性进行匹配
- 它在绑定队列和交换机时指定一组键值对,当发送消息到交换机时,RabbitMQ会获取到该消息的 headers,对比其中的键值对是否完全匹配队列和交换机绑定时指定的键值对,如果完全匹配则消息会路由到该队列,否则不会路由到该队列
- headers 类型的交换机性能很差,不太实用
注:BindingKey 并不是在所有的情况下都生效,它依赖于交换机类型,比如 fanout类型的交换机就会无视(路由键为空字符串),将消息路由到所有绑定到该交换机的队列中
四、Queue(消息队列)
Queue 是用来保存消息 发送给消费者的一个消息容器(内部对象)。一个消息可投入一个或多个队列。消息会一直待在队列里,等待消费者连接到这个队列将消息取走
五、Broker(服务节点)
一个broker 其实就是相当于一个RabbitMQ服务实例。
六、RabbitMQ的五种工作模式
1、简单模式
2、work 工作模式