RabbitMQ 队列参数

news2024/12/28 18:26:41

RabbitMQ 队列参数

RabbitMQ在申明队列的时候,可以指定一些参数:

/**
  * Declare a queue
  * @see com.rabbitmq.client.AMQP.Queue.Declare
  * @see com.rabbitmq.client.AMQP.Queue.DeclareOk
  * @param queue the name of the queue
  * @param durable true if we are declaring a durable queue (the queue will survive a server restart)
  * @param exclusive true if we are declaring an exclusive queue (restricted to this connection)
  * @param autoDelete true if we are declaring an autodelete queue (server will delete it when no longer in use)
  * @param arguments other properties (construction arguments) for the queue
  * @return a declaration-confirm method to indicate the queue was successfully declared
  * @throws java.io.IOException if an error is encountered
  */
  Queue.DeclareOk queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete,
                            Map<String, Object> arguments) throws IOException;

本次主要讲解 arguments 参数。

arguments

如果RabbitMQ开启了管理插件(rabbitmq-plugins enable rabbitmq_management),那么可以登录管理界面,在Queues下新增队列时可以看到参数。

在这里插入图片描述

Message TTL: 发布到队列的消息在被丢弃之前可以存在多长时间(毫秒)。(设置“x-message-ttl”参数。)
Auto expire: 队列在被自动删除之前可以使用多长时间(毫秒)。(设置“x-expires”参数。)
Max length: 一个队列在开始从头中丢弃消息之前可以包含多少(准备好的)消息。(设置“x-max-length”参数。)
Max length bytes: 队列在开始从头部丢弃消息之前所能包含的就绪消息的总正文大小。(设置"x-max-length-bytes"参数)
Overflow behaviour: 设置队列溢出行为。这决定了当达到队列的最大长度时消息会发生什么。有效值为drop-head、reject-publish或reject-publish-dlx。仲裁队列类型只支持drop-head和拒绝-发布。
Dead letter exchange: 一个可选的死信交换机,如果消息被拒绝或过期,将重新发布到死信交换机。(设置“x-dead-letter-exchange”参数。)
Dead letter routing key: 当消息是死信时使用的可选替换路由键。如果未设置此值,则将使用消息的原始路由键。(设置“x-dead-letter-routing-key”参数。)
Single active consumer: 如果设置,确保每次只从队列中使用一个使用者,并在活动使用者被取消或死亡的情况下故障转移到另一个注册使用者。(设置“x-single-active-consumer”参数。)
Maximum priority: 队列所支持的最大优先级数;如果没有设置,队列将不支持消息优先级。(设置“x-max-priority”参数。)
Lazy mode : 将队列设置为延迟模式,将尽可能多的消息保存在磁盘上,以减少RAM的使用;如果没有设置,队列将在内存中保留一个缓存以尽可能快地传递消息。(设置“x-queue-mode”参数。)
Master locator: 将队列设置为主位置模式,确定在节点集群上声明队列主位置时所依据的规则。(设置"x-queue-master-locator"参数。)

Message TTL

官网TTLd的文档:https://rabbitmq.com/ttl.html#per-queue-message-ttl

过期时间是一个毫秒数,最小值是0,会导致消息在到达队列时过期,除非消息可以立即传递给使用者。

设置整个队列的TTL:

Map<String, Object> args = new HashMap<String, Object>();
// 设置队列中的所有消息最大生存时间为60s
args.put("x-message-ttl", 60000);
channel.queueDeclare("myqueue", false, false, false, args);

设置单条消息的TTL

byte[] messageBodyBytes = "Hello, world!".getBytes();
AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
                                    // 单条消息最大生存时间为60S
                                   .expiration("60000")
                                   .build();
channel.basicPublish("my-exchange", "routing-key", properties, messageBodyBytes);

Auto expire

队列只有在没有被使用的情况下(例如,没有使用者)才会在一段时间后过期。此特性可以与自动删除队列属性一起使用。

x-expires 参数或过期策略的值expires以毫秒为单位描述过期时间。它必须是一个正整数(与消息 TTL 不同,它不能是0)。因此,值为1000意味着一个未使用1秒钟的队列将被删除。

该队列在30分钟未使用之后过期:

Map<String, Object> args = new HashMap<String, Object>();
args.put("x-expires", 1800000);
channel.queueDeclare("myqueue", false, false, false, args);

Max length & Max length bytes

官网文档:https://rabbitmq.com/maxlength.html
队列的最大长度可以限制为一组消息数或一组字节数(所有消息正文长度的总和,忽略消息属性和任何开销) ,或者两者兼而有之

对于任何给定的队列,都可以使用策略(强烈建议使用此选项)或客户端使用队列的可选参数来定义最大长度(任何类型的)。在有效队列策略和参数都指定最大长度的情况下,将使用这两个值中的最小值。

声明了一个最大长度为10条消息的队列:

Map<String, Object> args = new HashMap<String, Object>();
args.put("x-max-length", 10);
channel.queueDeclare("myqueue", false, false, false, args);

申明一个最大长度为10字节的最大长度的队列

Map<String, Object> args = new HashMap<String, Object>();
args.put("x-max-length-bytes", 10);
channel.queueDeclare("myqueue", false, false, false, args);

如果两个参数都设置了,那么两个参数都将应用; 首先达到的限制将被强制执行。

可以设置消息溢出行为:

Map<String, Object> args = new HashMap<String, Object>();
// drop-head (default), reject-publish or reject-publish-dlx.
args.put("x-overflow", "drop-head");
channel.queueDeclare("myqueue", false, false, false, args);

可以在管理界面查看队列的最大长度限制

Overflow behaviour

使用溢出设置来配置队列溢出行为。如果溢出设置为reject-publishreject-publish-dlx,则将丢弃最近发布的消息。此外,如果启用了发布者 confirm,则将通过 basic.nack 消息通知发布者拒绝。如果一条消息被路由到多个队列并被其中至少一个队列拒绝,通道将通过 basic.nack 通知发布者。消息仍然会被发布到所有其他可以对其进行排队的队列中。reject-publishreject-publish-dlx 之间的区别在于,reject-publish-dlx 也是拒绝消息的死信。

Dead letter exchange

官网:https://rabbitmq.com/dlx.html
以下情况,消息会进入死信

  • 消费者使用basic.reject 或者 basic.nackrequeue设置为false 时
  • 消息过期了
  • 消息达到队列设置的最大长度而被删除了

请注意,队列过期不会使队列中的消息死掉。

死信交换机也是正常的交换机。

设置队列的死信交换机,在声明队列时指定可选的 x-dead-letter-exchange参数。该值必须是同一虚拟主机中的交换器名称。

channel.exchangeDeclare("some.exchange.name", "direct");

Map<String, Object> args = new HashMap<String, Object>();
args.put("x-dead-letter-exchange", "some.exchange.name");
channel.queueDeclare("myqueue", false, false, false, args);

Dead letter routing key

上面定义了死信交换机,我们还可以指定一个RoutingKey,方便在使用死信消息时路由到不同的队列。

channel.exchangeDeclare("some.exchange.name", "direct");

Map<String, Object> args = new HashMap<String, Object>();
args.put("x-dead-letter-exchange", "some.exchange.name");
args.put("x-dead-letter-routing-key", "some-routing-key");
channel.queueDeclare("myqueue", false, false, false, args);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/138407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

内核源码解读之内存管理(10)percpu_page_set分析

文章目录背景数据结构pcp的初始化流程背景 Linux系统中0阶内存分配需求是最多的&#xff0c; 而且经常存在频繁分配释放的行为&#xff0c;如果每次都去伙伴系统中申请&#xff0c;会经常需要获取zone->lock锁住整个zone区域。随着CPU核心数的增加&#xff0c;伙伴系统锁竞…

jumpserver堡垒机配置https访问

官方文档&#xff1a;https://docs.jumpserver.org/zh/master/ Jumpserver部署关闭防火墙开放策略 按照需要开放端口即可 firewall-cmd --permanent --add-port22/tcp 开放22端口 firewall-cmd --permanent --add-port80/tcp 开放80端口 firewall-cmd --permanent --add-po…

ctfshow-信息搜集

web1 右键查看源码得到flag web2 禁用了右键&#xff0c;可以ctrlu查看源码得到flag web3 抓包得到flag web4 题目提示在robots中&#xff0c;可以用dirsearch 扫出来 访问robots.txt 再访问/flagishere.txt得到flag web5 题目提示源码泄露&#xff0c;再用dirsearch扫…

如何在Linux上安装文件同步工具:FreeFileSync

文件同步是最需要的功能之一&#xff0c;尤其是在共享文件时&#xff0c;不仅如此&#xff0c;它还可以很好地用于将数据与云存储同步。因此&#xff0c;如果您正在寻找一种可免费获得且易于在 Linux 上使用的工具&#xff0c;请不要错过本文。 在 Linux Mint 21 上安装 FreeF…

【数据结构】(牛客)链表中倒数第k个结点,(LeetCode)合并两个有序链表,(牛客)CM11 链表分割

目录 一、链表中倒数第k个结点 1、题目说明 2、题目解析 二、合并两个有序链表 1、题目说明 2、题目解析 三、CM11 链表分割 1、题目说明 2、题目解析 一、链表中倒数第k个结点 1、题目说明 题目链接&#xff1a;链表中倒数第k个结点 输入一个链表&#xff0c;输出该链表中倒…

U3D客户端框架(资源管理篇)之自动化打Assetbundle包管理器

一、AssetBundle介绍 AssetBundle是将资源使用Unity提供的一种用于存储资源的压缩格式打包后的集合&#xff0c;它可以存储任何一种Unity可以识别的资源&#xff0c;如模型&#xff0c;纹理图&#xff0c;音频&#xff0c;场景等资源。也可以加载开发者自定义的二进制文件。他…

CleanMyMacX4.12最新免费版苹果电脑系统优化清理软件

CleanMyMac X是一款Mac上优秀的系统清理工具&#xff0c;它可以帮助用户清理垃圾文件、清理缓存、清理日志文件、清理应用程序等&#xff0c;可以让Mac系统保持良好的运行状态&#xff0c;提高Mac的运行速度。CleanMyMac X还可以帮助用户清理垃圾文件、清理缓存、清理日志文件、…

PCB翘曲度标准是多少

PCB翘曲其实也是指电路板弯曲&#xff0c;是指原本平整的电路板&#xff0c;放置桌面时两端或中间出现在微微往上翘起&#xff0c;这种现象被业内人士称为PCB翘曲。 电路板翘曲度计算公式将电路板平放在桌面上&#xff0c;电路板的四个角着地&#xff0c;测量中间拱起的高度&am…

乐观的调优(插入排序希尔排序)

学习目标 写在前面 1.插入排序 2.插入排序实战 3.插入排序的实现 4.插入排序的效率 5.平均情况 6.希尔排序 7.希尔排序的实现 8.希尔排序的效率 9.总结 写在前面 之前我们衡量一个算法的效率时&#xff0c;都是着眼于它在最坏情况下需要多少步。原因很简单&#x…

PyQt6快速入门-开发环境搭建

PyQt6开发环境搭建 文章目录 PyQt6开发环境搭建1、软件安装2 、创建工程2.1 创建Qt工程2.2 创建Python工程2.3 PyQt6启动失败问题解决本文将介绍如何在Windows下创建PyQt6的开发环境。 1、软件安装 第一步,下载并安装Python环境 https://www.python.org/downloads/windows/或…

effective C++读书笔记3

目录 在资源管理中小心copy行为 在资源管理中提供对原始资源的访问 以独立语句将newed对象置入智能指针 这是effectiveC中第三章内容&#xff1a;资源管理 在资源管理中小心copy行为 不是所有资源都是heap-based&#xff0c;对那种资源而言&#xff0c;像auto_ptr和 tr1 :…

【C语言进阶】数据在内存的存储

作者:匿名者Unit 目录一.数据类型分类1.整形2.浮点型3.构造类型4.指针类型5.空类型二.整形的存储1.原、反、补码2.大小端存储三.浮点数的存储一.数据类型分类 根据不同的数据类型&#xff0c;在内存中的人存储方法也有所差异&#xff0c;所以我们先来介绍一下数据类型的分类。…

(二)uboot移植--从零开始自制linux掌上电脑(F1C200S)<嵌入式项目>

目录 一、前言 二、F1C200s上电启动顺序 三、前期准备 四、新建用户 五、交叉编译环境配置 六、uboot简介 七、uboot移植 &#x1f34f; uboot下载 &#x1f34f; uboot默认配置 &#x1f34f; uboot图形界面配置 &#x1f34f; uboot编译 &#x1f34f; 烧录bin…

Python-变量和简单数据类型

目录 1. 字符串 1.1. 修改字符串大小写 1.2. 合并字符串 1.3. 制表符与换行符 1.4. 删除空白 2. 数字 2.1. 使用 2.2. 使用str函数避免类型错误 2.3. 注释 2.4. Python之禅 1. 字符串 1.1. 修改字符串大小写 首字母大写&#xff1a;name.title()全部大写&#xf…

基于DDAUNet的CT食管肿瘤分割

摘要 在CT图像中手动或自动描绘食道肿瘤是非常具有挑战性的。这是由于肿瘤与邻近组织的对比度低,食道的解剖结构变化,以及偶尔存在异物(如喂食管)。 本文提出了一种基于卷积神经网络的全自动端到端食管肿瘤,本文所提出的网络称为扩张密集注意力网络,利用每个密集块中的空…

VScode代码片段尝试

最近开始尝试强迫自己使用 VSCode&#xff0c;毕竟 Webstorm 用了很多年了&#xff0c;依赖性比较严重。但是&#xff0c;最近 Webstorm 越来越难搞到免费永久合法使用方式了。 遂转向 VSCode 。 不过 VSCode 需要调教&#xff0c;不像 Webstorm 那么集成度比较高&#xff0c…

CalDAV网络服务器Baikal

什么是 Baikal &#xff1f; Baikal 是一个免费的开源自托管 CalDav 和 CardDav 服务器&#xff0c;适用于想要管理其数据并确保其数据是私有的用户。 Baikal和群晖套件中的 Synology Calendar 是类似的应用&#xff1b; 什么是 CalDav ? CalDav 是一种互联网标准和协议&…

Qt扫盲-QVector理论总结

QVector理论总结一、概述二、使用1. 声明初始化2. 获取元素和链表信息3. 常用操作4. 迭代Vector三、注意一、概述 QVector是Qt的泛型容器类之一。它将每一个元素存储在相邻的内存位置&#xff0c;并提供快速的基于索引的访问。 QList&#xff0c; QLinkedList&#xff0c; QVe…

eurake原理分析以及搭建

消费者随时能够监控到服务的状态 消费者如何获取服务提供者具体的信息&#xff1f; 1&#xff09;服务提供者启动时间eureka注册自己的信息 2&#xff09;eureka保存这些信息 3&#xff09;消费者根据服务名称向eureka拉取提供者的信息 如果有多个服务提供者&#xff0c;消费者…

VS代码生成工具ReSharper v2022.3官宣首发——支持C# 11

实质上&#xff0c;ReSharper特征可用于C#&#xff0c;VB.net&#xff0c;XML&#xff0c;Asp.net&#xff0c;XAML&#xff0c;和构建脚本。 使用ReSharper&#xff0c;你可以进行深度代码分析&#xff0c;智能代码协助&#xff0c;实时错误代码高亮显示&#xff0c;解决方案范…