8.概念回顾
1、ConnectionFactory、Connection、Channel
ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。
Connection是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑。
ConnectionFactory为Connection的制造工厂。
Channel是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。
2、Queue
Queue(队列)是RabbitMQ的内部对象,用于存储消息,用下图表示。
属性:
name:名字
Durability:是否持久化,Durable(是),Transient(否)
Exclusive:排他性
Auto Delete:如果选择yes,代表当最后一个监听移除后队列会自动删除
Arguments:自定义扩展属性
RabbitMQ中的消息都只能存储在Queue中,生产者(下图中的P)生产消息并最终投递到Queue中,消费者(下图中的C)可以从Queue中获取消息并消费。
多个消费者可以订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。
3、Binding
RabbitMQ中通过Binding将Exchange与Queue关联起来,这样RabbitMQ就知道如何正确地将消息路由到指定的Queue了。
4、Binding key
在绑定(Binding)Exchange与Queue的同时,一般会指定一个binding key;消费者将消息发送给Exchange时,一般会指定一个routing key;当binding key与routing key相匹配时,消息将会被路由到对应的Queue中。
在绑定多个Queue到同一个Exchange的时候,这些Binding允许使用相同的binding key。
binding key 并不是在所有情况下都生效,它依赖于Exchange Type,比如fanout类型的Exchange就会无视binding key,而是将消息路由到所有绑定到该Exchange的Queue。
5、Exchange
生产者将消息发送到Exchange(交换器,下图中的X),由Exchange将消息路由到一个或多个Queue中(或者丢弃)。
Exchange是按照什么逻辑将消息路由到Queue的?
RabbitMQ中的Exchange有四种类型,不同的类型有着不同的路由策略
6、Message
服务器和应用程序之间传递的数据,就是数据,有Properties和Body组成,属性有以下:
content_type
content_encoding
priority:优先级从0-9,这个优先级不一定越高获取越先
correlation_id:一般用来消息的唯一id,做一些ack,消息的路由,幂等情况下用到
expiration:消息存活时间
message_id
timestamp
type
user_id
app_id
cluster_id
这些属性有很多,我们会在接下来的课程中给大家逐一讲解到,首先我们先来看下如何在发送消息的时候设置消息的属性,编写一个基本的生产者消费者的代码
以下代码创建连接工厂、得到连接、创建Channel等省略
在生产者这边我们指定了消息的持久化模式,编码,生命时长,包括自定义的属性,接下来我们看下消费者
7、Virtual Host 虚拟主机
虚拟地址,用于进行逻辑隔离,最上层的消息路由,一个Virtual Host里可以有若干个Exchange和Queue
同一个Virtual Host里面不能有相同的名称的Exchange 或Queue