业务代码写不好直接把RabbitMQ干崩了

最近做了一次技术改造,由于对业务细节的不熟悉,开发代码细节处理不好,导致出了线上事故,把线上的服务和RabbitMQ内存都打满了。

事故回顾

  1. 中午11点左右业务人员反映系统异常,无法操作使用。
  2. 随后前台门户网站部分功能访问异常
  3. 开发人员进行紧急排查,发现是mq挤压
  4. 11点半左右,后台A服务所有副本已处于瘫痪状态,各种操作都是超时。
  5. 12点16左右紧急处理完问题上线服务,把挤压数据处理掉,线上服务逐渐恢复正常

原因剖析

1、生产者在推送mq消息的时候推送发布时间字段是空,导致queue消费端一直消费失败,消费者是开启自动ack,消费失败后又回到queue,接着再被消费,变成死循环,造成消息积压,导致rabbitmq机器内存一直在增长,吞吐量下降。 错误代码 错误日志: 2、因为queue消息积压内存持续增长,处理消息能力下降。生产者推送消息也要很久才会被ack确认。生产者的推送线程长时间处于阻塞状态,越来越多线程阻塞住,生产者也会被逐渐被拖垮。

生产者接口调用:

后续处理

迅速进行了线上服务回滚,保证了系统可用。相关开发人员根据问题定位做又一次迭代优化。 对于这种小架构级别的改动还是详细调用业务,梳理业务流程,画业务流程图,以方便测试人员针对性测试.

相关推荐
程序员张340 分钟前
SpringBoot计时一次请求耗时
java·spring boot·后端
程序员岳焱7 小时前
Java 与 MySQL 性能优化:Java 实现百万数据分批次插入的最佳实践
后端·mysql·性能优化
麦兜*7 小时前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构
大只鹅8 小时前
解决 Spring Boot 对 Elasticsearch 字段没有小驼峰映射的问题
spring boot·后端·elasticsearch
ai小鬼头8 小时前
AIStarter如何快速部署Stable Diffusion?**新手也能轻松上手的AI绘图
前端·后端·github
IT_10248 小时前
Spring Boot项目开发实战销售管理系统——数据库设计!
java·开发语言·数据库·spring boot·后端·oracle
bobz9658 小时前
动态规划
后端
stark张宇9 小时前
VMware 虚拟机装 Linux Centos 7.9 保姆级教程(附资源包)
linux·后端
亚力山大抵10 小时前
实验六-使用PyMySQL数据存储的Flask登录系统-实验七-集成Flask-SocketIO的实时通信系统
后端·python·flask
超级小忍10 小时前
Spring Boot 中常用的工具类库及其使用示例(完整版)
spring boot·后端