序列化配置
provider
<dubbo:service interface="com.example.DemoService" serialization="hessian2" ref="demoService"/>
consumer
<dubbo:reference id="demoService" interface="com.example.DemoService" serialization="hessian2"/>
上述配置中,服务端和消费端serialization属性指定了序列化方式为Hessian2。同样,你可以根据需要选择其他的序列化方式。
需要注意的是,序列化方式的选择应该与服务提供者和消费者之间的兼容性相匹配。如果服务提供者和消费者使用的序列化方式不一致,可能会导致通信失败。因此,在选择序列化方式时,应确保服务提供者和消费者都支持所选的序列化方式。
常用类型
1、Hessian2序列化:Hessian是一种跨语言的高效二进制序列化方式。Dubbo默认启用的序列化方式是阿里修改过的Hessian Lite,而不是原生的Hessian2序列化。
2、Fastjson序列化:Dubbo目前有两种实现,一种是采用的阿里的fastjson库,另一种是采用dubbo中自已实现的简单json库,一般情况下,json这种文本序列化性能不如二进制序列化。
3、Kryo依赖于字节码生成机制(底层使用了ASM库),因此在序列化速度上有一定的优势,但正因如此,其使用也只能限制在基于JVM的语言上其序列化的结果是二进制的byte[],因此像Redis这样可以存储二进制数据的存储引擎可以直接将Kryo序列化出来的数据存进去。
为了避免出现rpc调用出现序列化问题、尽量服务端和消费端使用相同的序列化方式
注意
1、rpc相关的类必须实现 Serializable 接口
2、服务端和消费端使用相同的序列化方式并保持版本一致
Kryo使用
1、添加依赖
<dependency><groupId>com.esotericsoftware</groupId><artifactId>kryo</artifactId><version>4.0.1</version></dependency><dependency><groupId>de.javakaffee</groupId><artifactId>kryo-serializers</artifactId><version>0.42</version><exclusions><exclusion><groupId>com.esotericsoftware</groupId><artifactId>kryo</artifactId></exclusion></exclusions></dependency>
2、使用springboot项目在配置文件添加如下配置指定序列化方式
dubbo.protocol.serialization=kryo
其他方式大同小异。
参考官网: https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/