RabbitMQ消息乱码

产生原因
  • 容器云组同事更新镜像后产生的
  • 详见博客 https://blog.csdn.net/weigang200820chengdu/article/details/102521408
业务场景
  • 用户修改昵称后抛MQ消息给业务方,业务方接收到消息后,取出最新的昵称展示
问题排查
  • 由于我们代码和业务方代码都没有修改,以为是RabbitMQ的问题
  • 通过咨询MQ开发和运维,都告知未升级版本和做其他操作
    在这里插入图片描述
  • 然后通过本地代码模仿业务方调用的方式(调用需要走两个dubbo项目),测试未出现乱码
    在这里插入图片描述
  • 通过如上测试后,想到可能是使用Docker部署导致的
  • 确认容器编码 编码正常
    在这里插入图片描述
  • 在测试环境进入容器 执行命令
java -XshowSettings:all -version

在这里插入图片描述

  • 文件编码格式是 UTF-8的,确认编码格式后就想到没有必要在 Dockerfile中指定编码格式了(但是事实不是这样的 问题就在于此)
  • 然后尝试修改对象转JSON串逻辑
# 旧
JsonUtil.toJson(object);
# 新
JSON.toJSONString(object);
  • MQ中还是乱码
  • 考虑到影响业务方较大,暂时通过Base64编解码解决问题
大佬指导解决思路
  • 确认MQ的sdk,发布和订阅是否强制指定编码格式
  • 发布未指定编码
    在这里插入图片描述
  • 订阅指定编码
    在这里插入图片描述
  • 看来sdk确认存在bug;考虑到MQ sdk一直处于没人维护状态,则最终问题没有找到
  • 大佬让确认下openjdk编码格式 执行命令
java -XshowSettings:all -version
# 确实是 file.encoding=UTF-8
  • 想到强制在Dockerfile中强制指定编码格式进行测试
ENV CUSTOM_JDK_OPTION '-Dfile.encoding=UTF-8'

在这里插入图片描述

  • mq本身不会去改字节,乱码的问题是两边编码不一致导致的
  • 通过在Dockerfile中加file.encoding=UTF-8或不加,执行命令 java -XshowSettings:all -version,返回信息都是一样的
  • 最后就需要容器云组和运维一起排查问题所在
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值