RabbitMQ的队列、交换机类型的概念与作用

一、什么是 RabbitMQ 的工作队列?

1、工作队列也称工作者模式,一个生产者、一个消费者

2、也可以一个生产者、多个消费者(竞争关系,可能会重复消费),不需要设置交换机(使用默认的交换机)

3、不需要设置交换机(使用默认的交换机)

二、队列参数

1、name: 队列的名称;

2、actualName: 队列的真实名称,默认用name参数,如果name为空,则根据规则生成一个;
3、durable: 是否持久化;
4、exclusive: 是否独享、排外的;
5、autoDelete: 是否自动删除;
6、arguments:队列的其他属性参数,有如下可选项:
(1)x-message-ttl:消息的过期时间,单位:毫秒;
(2)x-expires:队列过期时间,队列在多长时间未被访问将被删除,单位:毫秒;
(3)x-max-length:队列最大长度,超过该最大值,则将从队列头部开始删除消息;
(4)x-max-length-bytes:队列消息内容占用最大空间,受限于内存大小,超过该阈值则从队列头部开始删除消息;
(5)x-overflow:设置队列溢出行为。这决定了当达到队列的最大长度时消息会发生什么。有效值是drop-head、reject-publish或reject-publish-dlx。仲裁队列类型仅支持drop-head;
(6)x-dead-letter-exchange:死信交换器名称,过期或被删除(因队列长度超长或因空间超出阈值)的消息可指定发送到该交换器中;
(7)x-dead-letter-routing-key:死信消息路由键,在消息发送到死信交换器时会使用该路由键,如果不设置,则使用消息的原来的路由键值
(8)x-single-active-consumer:表示队列是否是单一活动消费者,true时,注册的消费组内只有一个消费者消费消息,其他被忽略,false时消息循环分发给所有消费者(默认false)
(9)x-max-priority:队列要支持的最大优先级数;如果未设置,队列将不支持消息优先级;
(10)x-queue-mode(Lazy mode):将队列设置为延迟模式,在磁盘上保留尽可能多的消息,以减少RAM的使用;如果未设置,队列将保留内存缓存以尽可能快地传递消息;
(11)x-queue-master-locator:在集群模式下设置镜像队列的主节点信息。
 

三、什么是 RabbitMQ 的交换机?

1、交换机相当于是消息的中转站,生产者发送消息到交换机,交换机再对消息进行处理

2、交换机收到消息后,可以把消息投递给某个或所有队列、或是将消息丢弃。到底如何操作取决于交换机的类型

四、RabbitMQ 交换机的三种类型 Fanout、Direct、Topic

1、Direct:直接(点对点)类型:把消息交给符合指定 Routing Key (路由键)的队列,更进一步精准发送给哪一个队列

2、Topic:主题(通配符)类型:
【1】把消息交给符合 Routing Key Pattern 的队列,此类型其实是对点对点类型的升级。可以设置 Pattern 规则,让符合此规则的某一组消息发送给符合 Routing Key 的队列
【2】通配符规则说明:
*:匹配一个词,用 . 来区分几个词,例如:add.user.info 这就是三个词,可匹配为:add.*.*
#:匹配一个或多个词,例如:add.user.info 这就是三个词,可匹配为:add.#
【3】通配符通常在交换机绑定队列的 routing key 中使用,然后根据发送消息指定具体的 routing key 的值来匹配交给相应的队列

3、Fanout:广播类型,一条消息可以同时发送到交换机绑定的所有队列中,队列都会收到消息,类似群发给各个队列,不需要设置 Routing Key (路由键)

4、以上三种类型的发送精准顺序为:1 > 2 > 3 即 点对点类型 > 通配符类型 > 广播类型

五、交换机参数

属性 说明
name 交换机名称
type 交换机类型 direct,topic,fanout,headers
durability 是否需要持久化,true 为持久化
auto delete 当最后一个绑定到 Exchange 上的队列被删除后,Exchange 就没有绑定的队列了,自动删除该 Exchange
internal 当前 Exchange 是否为内部交换机,默认为 false,客户端无法直接发送消息到这个交换机中,只能通过交换机路由到交换机这种方式
arguments 扩展参数,用于扩展 AMQP 协议自制定化使用

你可能感兴趣的:(MQ,rabbitmq)