美文网首页
线上问题排查——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