项目场景
某物联网系统A和系统B,两个系统fastjson版本为V1.1.37,该版本比较老,老版本的fastjson存在偶发性序列化数据异常等问题,因此打算升级A系统fastjson版本为V1.2.*以上版本解决异常报错问题。
问题描述
升级A系统fastjson版本为V1.2.*以上版本,系统B保持fastjson版本为V1.1.37,在A系统文件中升级fastjson版本为V1.2.76后,发现系统A和系统B两个系统有些消息无法通讯,导致某些功能不可用。
<com.alibaba.fastjson.verison>1.2.76</com.alibaba.fastjson.verison>
<!-- 加入fastjson依赖包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${com.alibaba.fastjson.verison}</version>
</dependency>
原因分析
查询日志排查相关问题,发现没有报错日志,最后在系统A和系统B测试环境进行debug发现,高版本系统的fastjson序列化的类,在低版本系统无法反序列化。
解决方案
回滚A系统fastjson版本为V1.1.37,该问题得到解决
<com.alibaba.fastjson.verison>1.1.37</com.alibaba.fastjson.verison>
<!-- 加入fastjson依赖包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${com.alibaba.fastjson.verison}</version>
</dependency>
最后总结
经过查询fastjson相关资料,V1.2.以下版本确实会存在一些偶发性序列化报错误问题、序列化丢失数据问题,不过高版本修复了一些问题在使用过程中几乎不会报异常,V1.2. 以上版本为较为稳定的版本。通过该问题的排查可以举一反三,在两个及以上系统中使用开源产品,例如:RabbitMQ、Fastjson、Kafka等,要考虑不同系统之间的版本不一致,会不会导致不同系统间数据传输异常,在使用时最好在测试环境进行验证。