RabbitMQ之Queue(队列)属性解读

​Queue(队列)是RabbitMQ的内部对象,用于存储消息队列,并将它们转发给消费者; ​

RabbitMQ中的Queue(队列)是消息的缓冲区,用于存储待处理的消息。它是RabbitMQ中最基本的消息传递模型。Queue具有以下特点:

  • 队列是消息的容器:队列用于存储待处理的消息,消息按照先进先出(FIFO)的顺序进行处理。
  • 队列是有界的:队列具有最大容量限制,当队列已满时,新的消息将无法进入队列,直到队列中的消息被消费或被手动删除。
  • 队列是持久化的:队列中的消息可以被持久化到磁盘上,以防止消息丢失。当RabbitMQ服务器重启时,持久化的消息将被恢复。
  • 队列是可配置的:队列可以通过设置不同的属性进行配置,例如队列的名称、是否持久化、是否自动删除等。

主要可配置的属性如下:

Type:队列类型Name:队列名称,就是一个字符串,随便一个字符串就可以;

Durability:声明队列是否持久化,代表队列在服务器重启后是否还存在;

Auto delete: 是否自动删除,如果为true,当没有消费者连接到这个队列的时候,队列会自动删除;

Exclusive:exclusive属性的队列只对首次声明它的连接可见,并且在连接断开时自动删除;基本上不设置它,设置成false ​

Arguments:队列的其他属性,例如指定DLX(死信交换机等);

1、x-expires:Number

当Queue(队列)在指定的时间未被访问,则队列将被自动删除;
2、x-message-ttl:Number

发布的消息在队列中存在多长时间后被取消(单位毫秒);
3、x-overflow:String

设置队列溢出行为,当达到队列的最大长度时,消息会发生什么,有效值为Drop Head或Reject Publish;
4、x-max-length:Number

队列所能容下消息的最大长度,当超出长度后,新消息将会覆盖最前面的消息,类似于Redis的LRU算法;
5、 x-single-active-consumer:默认为false

激活单一的消费者,也就是该队列只能有一个消息者消费消息;
6、x-max-length-bytes:Number

限定队列的最大占用空间,当超出后也使用类似于Redis的LRU算法;
7、x-dead-letter-exchange:String

指定队列关联的死信交换机,有时候我们希望当队列的消息达到上限后溢出的消息不会被删除掉,而是走到另一个队列中保存起来;
8.x-dead-letter-routing-key:String

指定死信交换机的路由键,一般和6一起定义;
9.x-max-priority:Number

如果将一个队列加上优先级参数,那么该队列为优先级队列;

(1)、给队列加上优先级参数使其成为优先级队列 x-max-priority=10【0-255取值范围】 (2)、给消息加上优先级属性 通过优先级特性,将一个队列实现插队消费;

复制代码
MessageProperties messageProperties=new MessageProperties(); 
  messageProperties.setPriority(8);

10、x-queue-mode:String(理解下即可)

队列类型x-queue-mode=lazy懒队列,在磁盘上尽可能多地保留消息以减少RAM使用,如果未设置,则队列将保留内存缓存以尽可能快地传递消息;
11、x-queue-master-locator:String(用的较少,不讲)

在集群模式下设置队列分配到的主节点位置信息;

每个queue都有一个master节点,所有对于queue的操作都是事先在master上完成,之后再slave上进行相同的操作;

每个不同的queue可以坐落在不同的集群节点上,这些queue如果配置了镜像队列,那么会有1个master和多个slave。

基本上所有的操作都落在master上,那么如果这些queues的master都落在个别的服务节点上,而其他的节点又很空闲,这样就无法做到负载均衡,那么势必会影响性能;

关于master queue host 的分配有几种策略,可以在queue声明的时候使用x-queue-master-locator参数,或者在policy上设置queue-master-locator,或者直接在rabbitmq的配置文件中定义queue_master_locator,有三种可供选择的策略:

  • (1)min-masters:选择master queue数最少的那个服务节点host;
  • (2)client-local:选择与client相连接的那个服务节点host;
  • (3)random:随机分配;
相关推荐
eRTE XFUN几秒前
Redis 设置密码(配置文件、docker容器、命令行3种场景)
数据库·redis·docker
Lhan.zzZ1 分钟前
Qt开发踩坑:QList越界问题导致程序崩溃
数据库·c++·qt
怀化纱厂球迷2 分钟前
android车载应用动画-仿窗帘式下拉显示!Android 实现跟手裁剪动画 + RecyclerView 列表展示
android·java
ayt00716 分钟前
Netty 4.2核心类解析:SingleThreadIoEventLoop的设计哲学与实现
java·网络
无名-CODING18 分钟前
Java 爬虫进阶:动态网页、多线程与 WebMagic 框架实战
java·爬虫·okhttp
weixin_7042660520 分钟前
Spring 注解驱动开发与 Spring Boot 核心知识点梳理
java·spring boot·spring
开开心心就好20 分钟前
伪装文件历史记录!修改时间的黑科技软件
java·前端·科技·r语言·edge·pdf·语音识别
8Qi823 分钟前
Redis哨兵模式(Sentinel)深度解析
java·数据库·redis·分布式·缓存·sentinel
数据库小组27 分钟前
从业务库到实时分析库,NineData 构建 MySQL 到 SelectDB 同步链路
数据库·mysql·数据库管理工具·数据同步·ninedata·数据库迁移·selectdb
wangchunting30 分钟前
数据结构-树
java·数据结构