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