序列化:把对象转换为字节序列的过程称为对象的序列化。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。
在Dubbo RPC中,同时支持多种序列化方式:
最近几年,各种新的高效序列化方式层出不穷,不断刷新序列化性能的上限,最典型的包括:
专门针对Java语言的:Kryo,FST等等
跨语言的:Protostuff,ProtoBuf,Thrift,Avro,MsgPack等等
这些序列化方式的性能多数都显著优于 hessian2 (甚至包括尚未成熟的dubbo序列化)。所以我们可以
为 dubbo 引入 Kryo 和 FST 这两种高效 Java 来优化 dubbo 的序列化。
使用Kryo和FST非常简单,只需要在dubbo RPC的XML配置中添加一个属性即可:
或者
可以通过扩展 Serialization、ObjectInput、ObjectOutput 来进行 dubbo 序列化的扩展。
package com.xxx;
import com.alibaba.dubbo.common.serialize.Serialization;
import com.alibaba.dubbo.common.serialize.ObjectInput;
import com.alibaba.dubbo.common.serialize.ObjectOutput;
public class XxxSerialization implements Serialization {
public ObjectOutput serialize(Parameters parameters, OutputStream output) throws IOException {
return new XxxObjectOutput(output);
}
public ObjectInput deserialize(Parameters parameters, InputStream input) throws IOException {
return new XxxObjectInput(input);
}
}
META-INF/dubbo/com.alibaba.dubbo.common.serialize.Serialization:
xxx=com.xxx.XxxSerialization
并且通过以下配置来使用新的扩展: