Dubbo 快速序列化 kryo 坑-NoClassDefFou

2020-05-18  本文已影响0人  天凉好个秋灬

内容简介: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 版本

<!-- https://mvnrepository.com/artifact/de.javakaffee/kryo-serializers -->  
<dependency>  
    <groupId>de.javakaffee</groupId>
    <artifactId>kryo-serializers</artifactId>
    <version>0.45</version>
</dependency>

<dependency>  
    <groupId>com.esotericsoftware</groupId>
    <artifactId>kryo</artifactId>
    <version>4.0.2</version>
</dependency>

而没有添加 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坑

上一篇 下一篇

猜你喜欢

热点阅读