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

RabbitMq消息阻塞,立即解决方案

如果目前你的 RabbitMQ 消费者 被卡住不再消费消息,且消息已经到达消费者绑定队列,但Spring Cloud Stream 没有继续触发 @StreamListener 的方法执行。这类问题一般是因为消费者线程阻塞消息被 RabbitMQ 拒绝投递。我们可以按照下面的步骤紧急处理:


✅ 立即解决方案(临时 + 快速恢复消费)

Step 1. 重启消费者服务

这一步是最快恢复消费的方式:

  • Spring Cloud Stream 的默认 ack 模式是自动 ack,只要没有抛出异常,MQ 就认为消费成功

  • 如果你遇到卡死,有可能是:

    • 前一条消息处理还没结束(线程阻塞)
    • 或者死循环/超时没释放线程
  • 重启服务可释放线程/消费挂起状态

# 假设是 docker 容器/服务
docker restart your-consumer-service
# 或者直接 kill 掉 Java 服务再启动

观察 RabbitMQ 管控台,看是否:

  • 队列消息数逐渐减少
  • 消费速率恢复为 > 0
  • 控制台中连接数和 channel 数重新建立

🔍 临时观察细节(可排查 root cause)

✅ RabbitMQ 控制台重点检查 3 项:

项目正常情况异常表现
Ready有新消息就增加,消费中就减少持续增长说明消息没人处理
Unacked一般在 0 ~ prefetch 区间内长期不变说明卡住未 ack
Consumer Utilization1.0小于 1.0 说明消费者阻塞或卡死

打开 RabbitMQ 中该 queue 的 “Consumer” 详情页,能看到具体的 Consumer 状态。


🔧 推荐补救优化(防止再次发生)

✅ 修改 application.yml 设置消费者并发 + prefetch:

spring:cloud:stream:bindings:executeAiBaseTask-in-0:destination: ai-paas-executeAiBaseTask.ai-platformrabbit:bindings:executeAiBaseTask-in-0:consumer:concurrency: 5       # 启动多个消费线程prefetch: 10         # 提前拉取多个消息处理acknowledge-mode: AUTO # 默认可以先用 AUTO,后面再换 MANUAL

✅ 改造处理逻辑为异步线程池提交:

@StreamListener(ExecuteAiBaseTaskBinding.INPUT)
public void executeAiBaseTask(String apiCode) {taskExecutor.submit(() -> handleAiTask(apiCode));
}

将你的整套复杂处理逻辑挪到 handleAiTask(apiCode) 中。


🛡️ 如果你急着排查是“哪条消息卡住了”

你可以尝试用 RabbitMQ 控制台 Web UI:

  • 在对应 Queue 上点击“Get messages

  • 获取队列中某些消息的 payload

  • 手动判断是否是某条任务数据异常

    • 比如 rightPop 之后无法解析 JSON、字段缺失、Redis 无响应等

总结

步骤目的操作
🔧 Step 1快速恢复消费重启消费服务
🔍 Step 2定位卡住原因RabbitMQ 控制台查看 Unacked 与队列状态
✅ Step 3防止再挂死增加并发、改异步处理、调高 prefetch
🛠 Step 4结构性优化异步线程池 + MANUAL ack 模式(推荐)

http://www.xdnf.cn/news/6003.html

相关文章:

  • 使用Thrust库实现异步操作与回调函数
  • spark数据清洗
  • 代码随想录训练营第二十三天| 572.另一颗树的子树 104.二叉树的最大深度 559.N叉树的最大深度 111.二叉树的最小深度
  • 编程日志5.5
  • 第8章-9 优化技巧2
  • 2025年Flutter项目管理技能要求
  • 数据库系统概论(八)SQL单表查询语言超详细讲解(附带例题表格对比带你一步步掌握)
  • 智能体制作学习笔记1——智能体
  • 【前端】:单 HTML 去除 Word 批注
  • 实战案例:采集 51job 企业招聘信息
  • [特殊字符] VMware虚拟机挂起后Docker容器MySQL无法连接的解决方案
  • Java类与对象的描述及内存原理
  • 激光打印机常见打印故障简单处理意见
  • WebPageTest 多地域测试
  • ElasticSearch深入解析(十一):分页和分批统计的三种实现
  • 【AI论文】健康的大型语言模型(LLMs)?——评估大型语言模型对英国政府公共健康信息的掌握程度
  • TypeScript 知识框架
  • Python之with语句
  • 高级 Java 锁技术:超越基本同步
  • 应用探析|千眼狼PIV测量系统在职业病防治中的应用
  • idea2021创建web项目及其整合tomcat
  • RuoYi-Cloud
  • CodeBuddy 中国版 Cursor 实战:Redis+MySQL双引擎驱动〈王者荣耀〉战区排行榜
  • 阳光学院【2020下】计算机网络原理-A卷-试卷-期末考试试卷
  • 中国区adsense接收pin码,身份验证和地址验证指南
  • AD Class创建与Class应用
  • 求由无穷串构成的二进制数的值
  • 初始“协议”
  • IPD流程实战:产品开发各阶段目标、关注点和交付
  • 基于概率论与数理统计的股市预测模型研究