RabbitMQ的LazyQueue
在默认情况下,RabbitMQ会将接收到的信息保存在内存中以降低消息收发的延迟。但在某些特殊情况下,这会导致消息积压,比如:
- 消费者宕机或出现网络故障
- 消息发送量激增,超过了消费者处理速度
- 消费者处理业务发生阻塞
一旦出现消息堆积问题,RabbitMQ的内存占用就会越来越高,直到触发内存预警上限。此时RabbitMQ会将内存消息刷到磁盘上,这个行为成为PageOut. PageOut会耗费一段时间,并且会阻塞队列进程。因此在这个过程中RabbitMQ不会再处理新的消息,生产者的所有请求都会被阻塞。
为了解决这个问题,从RabbitMQ的3.6.0版本开始,就增加了Lazy Queues的模式,也就是惰性队列。惰性队列的特征如下:
- 接收到消息后直接存入磁盘而非内存
- 消费者要消费消息时才会从磁盘中读取并加载到内存(也就是懒加载)
- 支持数百万条的消息存储
而在3.12版本之后,LazyQueue已经成为所有队列的默认格式。因此官方推荐升级MQ为3.12版本或者所有队列都设置为LazyQueue模式
1.控制台配置Lazy模式
在添加队列的时候,添加x-queue-mod=lazy参数即可设置队列为Lazy模式:

2.代码配置Lazy模式
在利用SpringAMQP声明队列的时候,添加x-queue-mod=lazy参数也可设置队列为Lazy模式:
@Beanpublic
Queue lazyQueue(){ return QueueBuilder.durable("lazy.queue").lazy() // 开启Lazy模式.build();}
这里是通过QueueBuilder的lazy()函数配置Lazy模式,底层源码如下:

当然,我们也可以基于注解来声明队列并设置为Lazy模式:
@RabbitListener(queuesToDeclare = @Queue(name = "lazy.queue",durable = "true",arguments = @Argument(name = "x-queue-mode", value = "lazy")))public void listenLazyQueue(String msg){log.info("接收到 lazy.queue的消息:{}", msg);}
3.更新已有队列为lazy模式
对于已经存在的队列,也可以配置为lazy模式,但是要通过设置policy实现。
可以基于命令行设置policy:
rabbitmqctl set_policy Lazy "^lazy-queue$" '{"queue-mode":"lazy"}' --apply-to queues
命令解读:
rabbitmqctl:RabbitMQ的命令行工具set_policy:添加一个策略Lazy:策略名称,可以自定义"^lazy-queue$":用正则表达式匹配队列的名字'{"queue-mode":"lazy"}':设置队列模式为lazy模式--apply-to queues:策略的作用对象,是所有的队列
当然,也可以在控制台配置policy,进入在控制台的Admin页面,点击Policies,即可添加配置:

相关文章:
RabbitMQ的LazyQueue
在默认情况下,RabbitMQ会将接收到的信息保存在内存中以降低消息收发的延迟。但在某些特殊情况下,这会导致消息积压,比如: 消费者宕机或出现网络故障消息发送量激增,超过了消费者处理速度消费者处理业务发生阻塞 一旦…...
面试经典150题——Day16
文章目录 一、题目二、题解 一、题目 42. Trapping Rain Water Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it can trap after raining. Example 1: Input: height [0,1,0,2,1,0,1,3,2,1,2,…...
从零开始搭建第一个django项目
目录 配置环境创建 Django 项目和 APP项目组成 子目录文件组成应用文件组成 配置 settings.py启动项目 数据表创建models.pyDjango-models的常用字段和常用配置 Django-admin 引入admin后台和管理员外键views.pyurls.pypostman接口测试 QuerySetInstance功能APIView 的概念…...
Godot2D角色导航-自动寻路教程(Godot获取导航路径)
文章目录 开始准备获取路径全局点坐标 开始准备 首先创建一个导航场景,具体内容参考下列文章: Godot实现角色随鼠标移动 然后我们需要设置它的导航目标位置,具体关于位置的讲解在下面这个文章: Godot设置导航代理的目标位置 获取…...
用c++写一个高精度计算的减法运算
这段代码是一个用C编写的程序,它实现了两个大整数的减法运算。 #include<iostream> #include<cstdio> #include<cstring> using namespace std;int main(){int a[256],b[256],c[256],lena,lenb,lenc,i;char n[256],n1[256]"1001",n2[2…...
基于白鲸优化的BP神经网络(分类应用) - 附代码
基于白鲸优化的BP神经网络(分类应用) - 附代码 文章目录 基于白鲸优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.白鲸优化BP神经网络3.1 BP神经网络参数设置3.2 白鲸算法应用 4.测试结果:5.M…...
Matlab遗传算法工具箱——一个例子搞懂遗传算法
解决问题 我们一般使用遗传算法是用来处理最优解问题的,下面是一个最优解问题的例子 打开遗传算法工具箱 ①在Matlab界面找到应用程序选项,点击应用程序(英文版的Matlab可以点击App选项) ②找到Optimization工具箱,点击打开 创建所需要…...
Coreldraw2020最新64位电脑完整版本下载教程
安装之前所有的杀毒软件都要退出。无论是360,腾讯管家,或者电脑自带的安全中心,要不然会阻止安装。 CorelDRAW2020版win下载如下:https://wm.makeding.com/iclk/?zoneid55678 CorelDRAW2020版mac下载如下:https://wm.makeding.com/iclk/?…...
第一节——vue安装+前端工程化
作者:尤雨溪 官网:简介 | Vue.js 脚手架文档 创建一个项目 | Vue CLI 一、概念(了解) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&…...
vue集成钉钉单点登录
初始环境判断 判断是否是来自钉钉环境的访问,返回:boolean类型值 window.navigator.userAgent.includes("DingTalk")前端引入vue中钉钉相关的依赖,并获取钉钉的临时授权码 import * as dingtalk from dingtalk-jsapi; let that …...
凉鞋的 Godot 笔记 203. 变量的常用类型
203. 变量的常用类型 在上一篇,我们对变量进行了概述和简介,知识地图如下: 我们已经接触了,变量的字符串类型,以及一些功能。 在这一篇,我们尝试多接触一些变量的类型。 首先是整数类型。 整数类型 整…...
【现场问题】批量新建工作流的问题
批量建工作流的优势和劣势 关于批量建工作流的优势缺点 关于批量建工作流的优势 不需要手动,直接一键建立,同时节点的批量建立也成功了 缺点 1、机器识别,一次性成形,没有办法手动的去干涉这东西 2、大数据量的表需要单独处理的…...
动态规划14(Leetcode516最长回文子序列)
代码: class Solution {public int longestPalindromeSubseq(String s) {int n s.length();int[][] dp new int[n][n];for(int in-1;i>0;i--){dp[i][i] 1;char c1 s.charAt(i);for(int ji1;j<n;j){char c2 s.charAt(j);if(c1c2){dp[i][j] dp[i1][j-1]2…...
写一个简单的解释器(0) 简介和目标
解释语言和编译语言 编译语言,是指其编译器生成的可执行文件为机器码,可以直接在计算机上运行的语言,比如说 C/C \texttt{C/C} C/C 。 解释语言,是指经由解释器生成的可执行文件为字节码文件,只能运行在特殊的虚拟机…...
通过Chain Prompts方式将LLM的能力引入测试平台:正交实验测试用例生成
通过Chain Prompts方式将LLM的能力引入测试平台:正交实验测试用例生成 Chain Prompts Chain Prompts是指在一个对话或文本生成任务中,将前一个提示的输出作为下一个提示的输入,形成一个连续的链条。这种方法常常用于创建连贯的、有上下文关联的文本。在对话系统中,这种方…...
M-BUS和modbus的区别是什么?
M-BUS与Modbus是两种在工业自动化和楼宇自动化领域广泛应用的通信协议。那么,这两种通信协议有哪些区别呢?下面,就由小编带大家一起来了解下吧! 一、简介 M-BUS(Multi-dropBus,多点通信总线)和Modbus(莫迪波特率)都是用于设备和系统之间通信…...
CSS 滚动驱动动画 timeline-scope
timeline-scope 语法兼容性 timeline-scope 看到 scope 就知道这个属性是和范围有关, 没错, timeline-scope 就是用来修改一个具名时间线(named animation timeline)的范围. 我们介绍过的两种时间线 scroll progress timeline 和 view progress timeline, 使用这两种时间线(通…...
R语言时间序列分析
目录 概述 1、什么是时间序列分析 2、时间序列分析的应用 时间序列的基本操作...
房产中介小程序,二手房小程序带H5公众号,房产门户PC版,房产中介,房产经纪人
套餐一:源码=1500 套餐二:全包服务 包服务器+APP+认证小程序+H5+PC+采集=2000(全包服务三年) 可以封装打包APP 一、付费发布信息 支持付费发布、刷新、置顶房源信息; 二、个人发布信息 支持个人和房产经纪人发布房源信息; 三、新房楼盘模块 支持新房楼盘功能,后台添加…...
Docker 部署
1 完全清除旧版本docker for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; doneImages, containers, volumes, and networks stored in /var/lib/docker/ arent automatically removed when y…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
