美文网首页
线上问题排查——RabbitMQ消费异常复盘

线上问题排查——RabbitMQ消费异常复盘

作者: 十六线程序员 | 来源:发表于2022-12-08 14:49 被阅读0次

一、问题现象

有小伙伴反应在啄木鸟后台使用运营号分表管理功能时异常。

这边的一个功能背景是:目前智慧社区的CA、CS等组件的数据库采用分库分表,以运营号(运营号映射一个TableCode编号)为分片键。当需要修改(删除、新增等)所有运营号的表结构时,可以在啄木鸟页面输入运营号、ddl语句等,啄木鸟会调用MC组件去发送RabbitMQ消息到对应的组件,执行DDL语句。

数据链路如下图

image.png

我通过日志发现,MC发送往RabbitMQ的消息已正确投递到CS组件,页面也给出如下提示。

image.png

查看对应CS组件的日志,发现如下内容

image.png

二、问题分析

问题很显然,是字符串转JSON对象时候报错。

image.png

奇怪,以前不会报这个错的,通过对比测试环境和开发环境打印的payload内容发现:测试环境的消息内容并没有转义字符,而开发环境确有。

正常的日志:

image.png

错误的日志:

image.png

**大胆猜测原因:消息的发送方式被改变了。 **

三、寻找根源

这里消息发送方的代码如下:

image.png

我们在当前MC组件并没有对RabbitTemplate做特殊定制,使用的是默认配置。

但是,当我打了断点并查看当前类注入的RabbitTemple时,发现已经被重新定义了。如下图。

image.png

发现主数据引入了这个框架,现有的发送消息RabbitTemplate类被重新定义,导致和以往消费端接收方式不兼容。

image.png

点进源代码发现,RabbitTemplate被重新定义了。MessageConverter使用的是Jackson2JsonMessageConverter,如下图。

image.png

RabbitTemplate默认使用SimpleMessageConverter。


image.png

四、确定根源

结论:RabbitTemplate中的MessageConverter属性被改变了,原先使用的是默认的SimpleMessageConverter,现在是JacksonMessageConverter。

相关文章

网友评论

      本文标题:线上问题排查——RabbitMQ消费异常复盘

      本文链接:https://www.haomeiwen.com/subject/tkvnfdtx.html