当前位置: 首页 > article >正文

记一次生产环境MQ队列积压150W问题分析与解决方案

# MQ队列积压150W问题分析与解决方案报告 ## 一、背景描述 ### 1.1 问题现象 - **队列积压量**150W 消息 - **影响范围**消息消费延迟严重队列持续增长 - **风险等级** **高危** - 存在MQ服务器内存溢出及宕机风险 ### 1.2 根因分析┌─────────────────────────────────────────────────────────┐│ 问题架构图示 │├─────────────────────────────────────────────────────────┤│ Producer ──► [MQ队列: 150W积压] ◄── Consumer ││ (生产者) 消息无差别投递 (消费者端过滤) ││ ││ ❌ 问题过滤逻辑后置导致无效消息大量堆积 ││ ││ 消费者处理流程 ││ 接收消息 → 计算MD5 → 查重判断 → 重复则丢弃 ││ ↑___________________________________________↓ ││ (高CPU消耗操作在消费端执行) │└─────────────────────────────────────────────────────────┘| 维度 | 现状问题 | 理想状态 | |:---|:---|:---| | **过滤位置** | 消费者端执行 | 生产者端执行 | | **资源消耗** | 150W次MD5计算 | 0次无效消息投递 | | **队列压力** | 无效消息占用存储 | 仅有效消息入队 | | **消费延迟** | 严重延迟 | 实时处理 | --- ## 二、MQ管理端操作简介 ### 2.1 常用管理工具 | 工具 | 访问方式 | 核心功能 | |:---|:---|:---| | **RabbitMQ Management** | http://host:15672 | 可视化监控、队列管理 | | **RocketMQ Console** | 部署Web控制台 | Topic/ConsumerGroup管理 | | **Kafka UI (Kowl/AKHQ)** | 独立部署 | 分区监控、消息查询 | ### 2.2 关键监控指标 bash # RabbitMQ 命令行查看队列深度 rabbitmqctl list_queues name messages_ready messages_unacknowledged # 输出示例 # name messages_ready messages_unacknowledged # task_queue 1523421 02.3 积压应急操作⚠️ 谨慎执行操作命令/路径适用场景查看队列状态Queues → 队列名 → Get messages诊断消息内容Purge清空队列Queues → 队列名 → Purge本次采用Delete删除队列Queues → 队列名 → Delete重建队列消费速率监控Overview → Message rates评估处理能力Purge操作截图示意RabbitMQ Management → Queues → [队列名] → [Purge Messages] 按钮 → 确认Are you sure?三、解决方案3.1 临时方案Purge清空队列执行步骤# 1. 确认积压队列名称rabbitmqctl list_queues|greptask# 2. 评估影响可选备份部分消息# 通过管理界面导出或消费端采样# 3. 执行Purge管理界面或APIcurl-uuser:pass-XDELETE http://mq-host:15672/api/queues/%2f/task_queue/contents# 4. 验证清理结果rabbitmqctl list_queues name messages_ready风险控制风险点应对措施误删有效消息业务低峰期执行提前通知业务方消息丢失不可恢复明确接受临时方案的数据损失消费者空转临时降低消费者实例数3.2 长久方案前置过滤逻辑架构改造┌─────────────────────────────────────────────────────────┐ │ 优化后架构图示 │ ├─────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ 任务生产 │───►│ MD5查重服务 │───►│ MQ队列 │ │ │ │ (Producer) │ │ (新增) │ │ (精简有效) │ │ │ └─────────────┘ └─────────────┘ └──────┬──────┘ │ │ ↑______________________________│ │ │ │ │ 重复任务直接过滤 │ ▼ │ │ └──────────────────────────────┘ ┌─────────────┐│ │ │ Consumer ││ │ │ (纯业务处理) ││ │ └─────────────┘│ │ │ │ ✅ 收益MD5计算前置无效消息0入队队列压力降低90% │ └─────────────────────────────────────────────────────────┘代码改造示例// 改造前消费者端过滤问题代码 ComponentpublicclassTaskConsumer{RabbitListener(queuestask_queue)publicvoidconsume(Messagemessage){StringfilePathparseMessage(message);// ❌ 问题高耗操作在消费端无效消息已占用队列Stringmd5calculateMd5(filePath);// 150W次执行if(md5Cache.exists(md5)){log.warn(重复文件丢弃: {},filePath);return;// 消息已投递资源已浪费}processBusiness(filePath);// 实际业务}}// 改造后生产者端过滤 ServicepublicclassTaskProducer{AutowiredprivateMd5Servicemd5Service;AutowiredprivateRabbitTemplaterabbitTemplate;publicvoidproduceTask(StringfilePath){// ✅ 优化入队前完成过滤Stringmd5md5Service.calculateMd5(filePath);if(md5Service.isDuplicate(md5)){log.info(重复文件跳过投递: {},filePath);return;// 直接过滤不占用MQ资源}// 仅有效消息入队TaskMessagemsgnewTaskMessage(filePath,md5);rabbitTemplate.convertAndSend(task_exchange,task_routing,msg);}}ComponentpublicclassOptimizedConsumer{RabbitListener(queuestask_queue)publicvoidconsume(TaskMessagemessage){// ✅ 消费端专注业务无需重复计算MD5processBusiness(message.getFilePath());}}配套优化MD5查重服务ServicepublicclassMd5Service{// 方案1Redis Set推荐O(1)查询AutowiredprivateStringRedisTemplateredisTemplate;publicbooleanisDuplicate(Stringmd5){BooleanaddedredisTemplate.opsForSet().add(md5:set,md5);return!Boolean.TRUE.equals(added);// 已存在返回true}// 方案2BloomFilter超大规模允许微量误判AutowiredprivateRBloomFilterStringbloomFilter;publicbooleanmightDuplicate(Stringmd5){if(!bloomFilter.contains(md5)){bloomFilter.add(md5);returnfalse;// 一定不重复}returntrue;// 可能重复需二次确认}}四、方案对比与收益指标改造前临时方案长久方案队列积压150W持续增长清零维持低位MD5计算次数150W/批次-有效任务数MQ存储压力极高缓解极低消费延迟小时级恢复秒级数据一致性最终一致可能丢失最终一致实施成本-5分钟2-3天开发五、实施时间线Day 0 ──┬── 问题发现队列积压150W │ Day 0 ──┼── [紧急] 执行Purge临时方案 ✅ 14:00 │ │ Day 1-2 ──┼── 开发长久方案MD5查重服务 │ Day 3 ──┼── 联调测试灰度发布 │ Day 4 ──┴── 全量上线监控验证 ✅六、经验总结6.1 设计原则“过滤前置计算后置”— 昂贵操作尽量靠近数据源6.2 监控建议// 增加生产者端指标监控MeterRegistryregistry...;registry.counter(mq.produce.filtered,reason,duplicate).increment();registry.counter(mq.produce.success).increment();6.3 防护机制生产者端限流 重复校验MQ层队列长度告警阈值10W消费者端消费速率监控 自动扩容

相关文章:

记一次生产环境MQ队列积压150W问题分析与解决方案

# MQ队列积压150W问题分析与解决方案报告## 一、背景描述### 1.1 问题现象 - **队列积压量**:150W 消息 - **影响范围**:消息消费延迟严重,队列持续增长 - **风险等级**:🔴 **高危** - 存在MQ服务器内存溢出及宕机风险…...

解锁文献综述新境界:书匠策AI的“智慧魔法”

在学术的广袤天地里,论文写作宛如一场充满挑战与惊喜的冒险,而文献综述则是这场冒险中至关重要的一站。它如同一张地图,为我们指引研究方向,梳理前人成果,让我们站在巨人的肩膀上眺望未来。然而,面对浩如烟…...

GPS原理笔记三——GPS卫星轨道理论和计算

GPS原理笔记三——GPS卫星轨道理论和计算 3 GPS卫星轨道理论和计算3.1 空间坐标系3.1.1 惯性坐标系(ECI)3.1.2 地固坐标系(ECEF)3.1.3 WGS-84坐标系(WGS-84)3.1.4 直角坐标系间的旋转变换3.1.5 站心坐标系(ENU) 3.2 时间系统3.3 GPS卫星轨道理论3.4 卫星空间位置的计算3.5 卫星…...

Windows家庭版升级专业版全攻略

好的,这是将Windows家庭版升级到专业版的详细教程: 方法1:通过购买许可证升级(推荐) 打开设置:按 Win I 打开设置应用。进入激活页面:导航至 更新和安全 > 激活。更改产品密钥&#xff1a…...

51单片机PID算法控制无刷直流电机Proteus仿真探索

51单片机PID算法控制无刷直流电机proteus仿真 功能描述 1.五个按键,停止/启动,正转,反转,加速,减速 2.显示lcd1602,第一行设置速度set 3.第二行实际速度speed r/min 4.第一行右上角转正显示Z&#…...

Kinect 2.0实战:5步搞定深度图与RGB图对齐(附Python代码)

Kinect 2.0实战:5步搞定深度图与RGB图对齐(附Python代码) 当你第一次拿到Kinect 2.0设备时,最令人兴奋的莫过于它能够同时捕捉深度信息和彩色图像。但很快你会发现一个棘手的问题——这两组数据在像素层面上并不完全匹配。深度图中…...

Jupyter Notebook虚拟环境消失?3步搞定ipykernel安装与配置(附清华镜像源)

Jupyter Notebook虚拟环境消失?3步搞定ipykernel安装与配置(附清华镜像源) 当你满怀期待地打开Jupyter Notebook准备开始一天的Python开发,却发现辛苦创建的虚拟环境竟然不在可选列表中——这种场景对许多开发者来说并不陌生。虚…...

Agent工作流太臃肿?试试AFlow算法,用蒙特卡洛树搜索自动帮你‘瘦身’和重构

Agent工作流架构优化:AFlow算法与蒙特卡洛树搜索的自动化重构实践 1. 复杂Agent系统的架构挑战 在构建多Agent系统时,工程师们常常面临一个棘手的困境:随着业务逻辑的复杂化,工作流会逐渐变得臃肿且低效。一个典型的数据分析流水线…...

基于电流模型与磁链估算的异步电动机高速矢量控制系统设计

基于电流模型转子磁链估算的异步电动机有速度传感器矢量控制系统异步电机矢量控制玩得溜不溜,关键就看磁链估算准不准。今天咱们来唠唠基于电流模型的转子磁链估算方案,这可是带速度传感器的经典玩法。别被专业名词吓到,说白了就是既要电流模…...

Linux之固定IP地址、启动部署好的LLM服务

一、固定Linux的IP地址原因:断电、关机重启会导致服务器ip地址发生改变,IP地址发生变换会导致shell无法连接服务器。固定IP地址可以方便我们使用shell连接服务器稳定操作,所以了解固定IP是非常有必要的。这里推荐使用服务器图形化操作界面具体…...

Kafka(二):从Lambda到Kappa,流批一体计算的起源

你好,我是程序员贵哥。 在上节课里,我们已经了解了Kafka的基本架构。不过,对于基于Kafka的流式数据处理,我们还有两个重要的问题没有回答: 第一个,Kafka的分布式是如何实现的呢?我们已经看到了K…...

WowStore – Store Builder Product Blocks for WooCommerce WordPress 插件SQL注入[ CVE-2026-2579 ]

基本信息项目详情漏洞编号CVE-2026-2579插件名称WowStore – Store Builder & Product Blocks for WooCommercefofa"wp-content/plugins/product-blocks"受影响版本≤ 4.4.3补丁版本4.4.4CVSS 3.17.5(高危)漏洞类型SQL注入(SQL…...

AI时代前端突围指南

在AI浪潮席卷全球的背景下,前端开发者正站在一个机遇与挑战并存的历史节点。生存与发展的关键在于主动拥抱变化,将AI从潜在的“替代者”转变为强大的“赋能工具”,并以此为核心重构自身的技术栈与职业定位。 一、AI时代前端开发者的核心能力…...

CTFShow _Web应用安全与防护 第二章WP

1.一句话木马变形看到了php代码解释器,那么就可以输入一些php代码,看看是否有什么过滤,先输入一个 phpinfo();成功返回了php相关信息,那么可以尝试一些命令注入system(ls);成功返回了当前目录下的文件,看到了flag文件&…...

如何在ESP32上运行TinyML模型

在ESP32上运行TinyML模型,主要流程可以概括为“在电脑上训练模型 -> 转换为轻量格式 -> 部署到设备进行推理”。下面梳理出三种主流的可行方案,你可以根据自己的技术背景和项目需求进行选择。核心流程概览无论选择哪种方案,都遵循类似的…...

C++中的前置自增运算符与后置自增运算符

C中的前置自增运算符与后置自增运算符 语义上的区别 i, 后置自增, 先返回旧值, 再自增; i, 前置自增, 先自增, 再返回旧值; 程序测试#include <iostream>using namespace std;int main() {int a {1}, b {a}, c {a};cout << "a " << a << en…...

低成本边缘AI硬件开发实战:从芯片选型到量产部署

低成本边缘AI硬件开发实战&#xff1a;从芯片选型到量产部署 引言 边缘AI正快速渗透智能制造、智能安防、宠物科技等中小企业市场。然而&#xff0c;高昂的硬件成本、复杂的开发流程成为落地瓶颈。上海拓匡科技近期为多家中小企业完成边缘AI硬件全流程交付&#xff0c;本文分享…...

Web实现电脑画面预览鼠标远程操作

使用pyhon实现web预览电脑画面以及鼠标远程操作 1 界面效果 2 电脑端程序 tmp.py import asyncio import websockets import json import base64 import io import time from PIL import ImageGrab import pyautogui from PIL import Image...

Ubuntu 22.04下RTX 4090多卡训练Qwen-14B,NCCL通信报错怎么解?(实测有效)

Ubuntu 22.04下RTX 4090多卡训练Qwen-14B的NCCL通信问题解决方案 最近在Ubuntu 22.04系统上使用RTX 4090显卡进行Qwen-14B模型的多卡训练时&#xff0c;遇到了一个典型的NCCL通信报错问题。这个错误不仅影响了训练效率&#xff0c;还让不少开发者陷入了调试的困境。本文将深入分…...

2026商用免许可音乐全攻略:合法商用无压力的优质平台终极盘点

在短视频、品牌营销、商业播客内容井喷的2026年&#xff0c;商用音乐的版权合规与成本控制&#xff0c;已成为内容创作者、营销团队和企业绕不开的核心问题。传统音乐授权流程繁琐、持续支付版税成本高昂&#xff0c;而商用免许可音乐凭借一次性付费甚至零成本、授权清晰、合法…...

人工智能时代算力基建哪家强?

中国联通与中国电信&#xff1a;人工智能、云计算、无人驾驶与机器人通信的竞争优势分析 ——基于2025-2026年券商研报与行业动态的深度解读 摘要 在“十五五”规划开局之年&#xff08;2026年&#xff09;&#xff0c;中国通信行业正经历从“传统管道商”向“数字智能服务商”…...

健康有益健康监测座舱:以科技之力,定义出行健康新标杆

汽车产业新四化浪潮席卷而来&#xff0c;当汽车从代步工具升级为智能移动空间&#xff0c;驾乘者对健康出行的需求也迎来质的飞跃。如今&#xff0c;单纯的座舱舒适配置已无法满足用户期待&#xff0c;出行即健康守护成为新的消费痛点&#xff0c;也成为车企突破同质化竞争的核…...

gorm 中的Updates Update, Save,Create , UpdateColumn 区别与联系

在 GORM&#xff08;Go 的 ORM 库&#xff09;中Updates、Update、Save、Create、UpdateColumn 等方法都用于数据的写入或更新&#xff0c;但它们的行为、触发的钩子&#xff08;Hooks&#xff09;、性能、适用场景有显著区别。以下是详细对比与联系:一、核心方法对比表方法用途…...

错误弹窗记录

public partial class ErrorForm : Form{private static string error_str "系统错误";public ErrorForm(){InitializeComponent();pictureBox1.Image SystemIcons.Error.ToBitmap();pictureBox1.SizeMode PictureBoxSizeMode.StretchImage;label1.Text Error_st…...

从CUDA到MUSA(四):GPU架构揭秘——从Warp到Occupancy

引言&#xff1a;从代码到硬件的深层理解 在前三篇博客中&#xff0c;我们完成了GPU编程的"入门三部曲"&#xff1a;理解异构计算的设计哲学、编写第一个向量加法程序、掌握多维线程组织与数据映射。至此&#xff0c;你已经能够写出正确的GPU程序。 但正确只是起点。…...

2026 年四可改造最后期限!这些省份必须完成

摘要&#xff1a;2026 年是分布式光伏四可改造的关键年份&#xff0c;多个省份明确最后完成期限。本文汇总 45 省市四可改造政策时间要求&#xff0c;帮您快速了解所在地区截止时间、改造要求和未完成后果。建议收藏备用&#xff01;关键词&#xff1a;四可改造、2026 年、最后…...

计算机毕业设计springboot校园智能卡管理系统设计与实现 高校一卡通数字化管理平台的设计与实现 基于Spring Boot框架的校园智慧卡服务系统开发

计算机毕业设计springboot校园智能卡管理系统设计与实现8wbp89&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着高校信息化建设的深入推进&#xff0c;传统校园卡管理模式已难…...

Dify 模型供应商下载失败解决办法

问题现象&#xff1a; 部署或使用 Dify 时&#xff0c;模型供应商&#xff08;如 OpenAI、Anthropic 等&#xff09;的依赖包下载失败&#xff0c;提示网络连接超时或资源不可用。 原因定位&#xff1a; langgenius/dify: Production-ready platform for agentic workflow dev…...

音叉这玩意儿在光热振动里真是妙啊,特别是用COMSOL建模的时候,玩参数就像调电子琴的旋钮。先给你们看段核心参数设置代码

COMSOL仿真模型音叉光热致振动光源频率、光斑直径、光斑位置可调&#xff0c;特征频率振型model.param.set(f0, 32[Hz], 基准频率) model.param.set(d_spot, 20[um], 光斑直径) model.param.set(x_pos, 0.5*L_tine, 光斑横向位置) 这三个参数直接决定了音叉会不会"唱歌&qu…...

java基于微信小程序的物流仓储管理系统 可视化

目录系统架构设计核心功能模块划分技术实现路径性能优化策略测试验证方案部署运维建议项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作系统架构设计 采用前后端分离架构&#xff0c;前端使用微信小程序…...