专栏首页松华说微服务架构之Msgpack序列化最佳实践

微服务架构之Msgpack序列化最佳实践

任何Java序列化工具,序列化/反序列化的时候,都是通过反射去遍历Class属性,然后挨个生成byte数组。Msgpack序列化的时候,filed不写key,只写index,类似数组,它的编码方式是type+length+body,这样传输时整体包会小很多,另外Msgpack支持启动预生成msgpack模版,而不用每次都反射(题外话:方法的反射调用会带来不少性能开销,原因主要有变长Object[] objs或Object… objs参数方法、自动装箱拆箱、方法内联失效,对反射感兴趣的朋友可以阅读原文)。不过糟糕的是Msgpack不支持泛型、Ref引用,而且集合类型会丢失

基于这些特性,在服务端和消费者不能同时升级的情况下,字段兼容规则如下,否则会出现模板污染

1、字段变更必须是保证在字段顺序最后一位,另外存在父子类的情况下,变更字段不能加在父类,否则会导致子类的最后一个字段没有机会得到覆值

2、禁止直接使用不熟悉的复杂类,有可能属性里面存在Native,或者内部引用内部类,会导致报错

3、不能使用内部类,尤其是集合内部类包括list.sublist、map.keyset等在不同jdk版本下实现方式不一样的方法

4、不能使用第三方包提供的集合类工具包作为返回值或者入参

public Class A{
          Map<String,String> a();
      }
  
      public Class Aimpl implements A{
          public Map<String,String> a(){
              //  不能这样使用
              return JSON.parseObject("{}");
          }
      }

5、虽然msgpack不强制要求实体类实现Serializable接口,但是还是强烈建议加上,方便切其他序列化

6、类属性上不能使用具体类,要使用接口或者超类。JDK 版本不一样,导致数据结构不一样

   public Class A{
          //不能这样使用
          private ConcurrentHashMap<String,String> a;
      }

本文分享自微信公众号 - 松华说(songhuasay),作者:松花皮蛋

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 梁老师小课堂|谈谈分布式任务调度

    我们常说的定时任务有两种架构,一种是本地定时任务调度,另外一种是分布式的。前者将任务参数硬编码在代码配置中,通常还和业务代码混合在一起,部署时通过环境变量来区分...

    公众号_松华说
  • ARTS打卡第十一周

    Dubbo框架的文章还会持续更新,不过还需要深入研究下,这次放打卡的文章,历史打卡下拉到末端可看

    公众号_松华说
  • 我们应该从JAVA集合中学到什么

    本文不讲解各种集合间的区别,适用场景是什么,增删改查的时间复杂度和时间复杂度是多少,是否线程安全,是否有序,是否支持随机访问,是否是快速失败的,...

    公众号_松华说
  • 史上最全webview详解

    WebView在现在的项目中使用的频率应该还是非常高的。 我个人总觉得HTML5是一种趋势。找了一些东西,在此总结。 本篇最后有一个非常不错 的 Html5...

    xiangzhihong
  • Lombok学习

    Lombok是一个Java库,能自动插入编辑器并构建工具,简化Java开发。通过添加注解的方式,不需要为类编写getter或eques等常规方法,同时可以自动化...

    神秘的寇先森
  • Java设计模式之适配器模式

    今天讲适配器模式,这个模式也很简单,你笔记本上的那个拖在外面的黑盒子就是个适配器,一般你在中国能用,在日本也能用,虽然两个国家的的电源电压不同,中国是220V,...

    CoderJed
  • Swagger文档转Word 文档

    GitHub 地址:https://github.com/JMCuixy/SwaggerToWord/tree/developer 一、前言     为什么会产...

    JMCui
  • Android WebView的使用方法及与JS 相互调用

    4、WebView 的两个重要方法 WebViewClient 和 WebChromeClient

    砸漏
  • 武汉疫情系列(工具类)|JAVA爬取丁香医生|腾讯新闻|新浪等全国新型肺炎疫情实时动态

    小小鱼儿小小林
  • Java Object流和Propertise流

    黑白格

扫码关注云+社区

领取腾讯云代金券