Dubbo 快速序列化 kryo 坑-NoClassDefFoundError

内容简介:Dubbo 默认使用序列化方式是阿里基于 hession 修改而来的 hessian lite,而 hessian 本身是一种跨语言的高效二进制序列化方式,但 hessian lite 不能很好的支持泛型对象的序列化和反序列化,且并没有对 Java 有专门的优化,所以 kryo 与 FST 这类高效序列化协议成为替代 hessian lite 的最好选择,但因为 Dubbo 对并没有对他们做很好的整合,所以下面请进入深坑集锦

添加maven依赖

生产者 和 消费者 两端均要添加 kryo 的 4.0.2 与 kryo-serializers 依赖,kryo-serializers 现在最新版是 0.45,但依然不兼容 kryo 的 5.x 版本

  
  
    de.javakaffee
    kryo-serializers
    0.45


  
    com.esotericsoftware
    kryo
    4.0.2

而没有添加 kryo 依赖,会报如下错误


Caused by: java.util.concurrent.ExecutionException: org.apache.dubbo.remoting.RemotingException: io.netty.handler.codec.EncoderException: java.lang.NoClassDefFoundError: com/esotericsoftware/kryo/io/Output

如果 kryo 的以来版本太高,则会报如下错误


Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.dubbo.common.serialize.kryo.utils.KryoUtils

如果没有 kryo-serializers 依赖在dubbo2.6.2下会报如下错误


Caused by: java.lang.NoClassDefFoundError: de/javakaffee/kryoserializers/ArraysAsListSerializer

参考文章:
changes from 4.0.2 to 5.0.0-RC1
在Dubbo中使用高效的Java序列化(Kryo和FST)
kryo高速序列化坑,springboot版本是2.2.1.RELEASE
dubbo坑

你可能感兴趣的:(Dubbo 快速序列化 kryo 坑-NoClassDefFoundError)