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

《一次静态 ObjectMapper 引发的 RocketMQ 消费异常排查》

静态 ObjectMapper 引发的 RocketMQ 消费异常

  • 一、问题背景
  • 二、问题原因
  • 三、思考与采取措施
  • 四、根本原因(Spring 注入 & 静态变量 & RocketMQ 消费线程)
  • 五、解决方案
  • 六、总结

一、问题背景

在工作中日常使用 RocketMQ 作为消息队列进行异步处理时,发现一个很奇怪的现象:

  • 消费者注册成功,控制台无报错 ✅
  • 消息发送正常✅
  • 但是就是收不到消息 ,没有任何异常的日志❌

二、问题原因

// 问题代码
private static final ObjectMapper objectMapper = new ObjectMapper();@Overridepublic void onMessage(String msg) {try {MyDTO dto = objectMapper.readValue(msg, MyDTO.class);log.info("Received and parsed message: {}", dto);// TODO: process dto} catch (Exception e) {log.error("Failed to deserialize message: {}", msg, e);}}

现象描述:

  1. 消费方法 onMessage 从未被触发
  2. RocketMQ 控制台看消息已经成功发送
  3. 本地没日志也没报错

三、思考与采取措施

排查顺序:

  1. 检查 topic 和 group 是否一致
  2. 检查是否开启消费(listener 生效)
  3. 查看消息轨迹,确认消息已投递
  4. 添加日志发现 onMessage 根本没有触发
  5. 怀疑是反序列化失败,但是catch 里面也没有打日志出来
  6. objectMapper 换成 @Autowired,结果立刻恢复正常

四、根本原因(Spring 注入 & 静态变量 & RocketMQ 消费线程)

  • static final ObjectMapper 手动 new 出来的,不受 Spring 管理
  • Spring 注入的 @Autowired ObjectMapper 是配置完整、统一管理的
  • 如果反序列化失败,RocketMQ 默认不会抛出可见异常,尤其在异步线程中可能被吞掉
  • static 变量初始化早于 Spring 生命周期,可能没准备好就被调用

五、解决方案

  • 不要手动 new ObjectMapper,使用 Spring 注入
@Autowired
private ObjectMapper objectMapper;

六、总结

这个问题看似“像是线程问题”,实则是Spring 生命周期 + 组件注入机制的组合坑。
教训:当 Spring 项目中用到第三方组件(如 ObjectMapper)时,优先用 Spring 提供的注入,而非自己手动 new!

相关文章:

  • 极刻云搜-专业的软件网址搜索引擎
  • Linux421用户、组
  • 移动端动态滑动拨盘选择器【Axure元件库】
  • CMake execute_process用法详解
  • HyperDefect-YOLO:基于超图计算的工业缺陷检测算法解析
  • cdq 系列 题解
  • arkTs:使用Refresh实现下拉刷新功能(含状态提示与动画控制)
  • 并发设计模式之双缓冲系统
  • 基于SpringBoot的心情疗愈平台-项目分享
  • oracle rac时区问题导致远程查询时间不准
  • 报告系统状态的连续日期 mysql + pandas(连续值判断)
  • 【MySQL】数据库安装
  • Python Cookbook-6.6 在代理中托管特殊方法
  • Flowith AI,解锁下一代「知识交易市场」
  • C语言 函数(上)
  • CAD文件如何导入BigemapPro
  • Java:多线程
  • 极刻AI搜v1.0 问一次问题 AI工具一起答
  • Kubernetes相关的名词解释Container(16)
  • Linux:进程:进程控制
  • 上海优化餐企发展环境:装修拓展门店最高奖50万,建立问题协调机制
  • 旁白丨无罪后领到国家赔偿,一位退休教师卸下了“包袱”
  • 马文化体验展商圈启动,环球马术冠军赛的能量不止在赛场
  • 美团回应京东“二选一”指控:没有任何理由对某平台进行任何限制
  • 平均25岁,天津茱莉亚管弦乐团进京上演青春版《春之祭》
  • A股低开高走,震荡收涨:两市成交10414亿元,4360股收涨