dubbo之Serialization
发布日期:2021-05-16 10:23:25
浏览次数:12
分类:技术文章
本文共 2842 字,大约阅读时间需要 9 分钟。
前言
在《》中可知Serialization层为dubbo的最底层。序列化说白了就是把内存中的对象转化成二进制,再由二进行转化为内存对象的过程。
序列化
dobbo提供Serialization接口
@SPI("hessian2")public interface Serialization { // 返回dubbo自定义的序列化ID byte getContentTypeId(); // 返回序列化文本描述 String getContentType(); // 定义序列化方法 @Adaptive ObjectOutput serialize(URL url, OutputStream output) throws IOException; // 定义反序列化方法 @Adaptive ObjectInput deserialize(URL url, InputStream input) throws IOException;}
从《》分析得知生成 Serialization$Adaptive:
- 如果url存在serialization参数,则会在spi容器中找到对应的Serialization实体类
- 如果不存在,则用hessian2
public class SerializationTest { public static void main(String[] args) throws IOException, ClassNotFoundException { // 从根据Serialization规则生成Serialization$Adaptive Serialization serialization = ExtensionLoader.getExtensionLoader(Serialization.class).getAdaptiveExtension(); // 使用Adaptive规则使用protostuff序列化工具 URL url = URL.valueOf("http://127.0.0.1/?serialization=protostuff"); PP pp = new PP(); pp.setAge(15); pp.setSex(2); ByteArrayOutputStream output = new ByteArrayOutputStream(); serialization.serialize(url, output).writeObject(pp); ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray()); PP p1 = serialization.deserialize(url, input).readObject(PP.class); // 输出结果 age:15 sex:2 System.out.println(p1); }}
协议
查看org/apache/dubbo/dubbo/2.7.8/META-INF/dubbo/internal/org.apache.dubbo.common.serialize.Serialization文件,dubbo支持各种序列化协议
fastjson=org.apache.dubbo.common.serialize.fastjson.FastJsonSerializationfst=org.apache.dubbo.common.serialize.fst.FstSerializationhessian2=org.apache.dubbo.common.serialize.hessian2.Hessian2Serializationnative-hessian=org.apache.dubbo.serialize.hessian.Hessian2Serializationjava=org.apache.dubbo.common.serialize.java.JavaSerializationcompactedjava=org.apache.dubbo.common.serialize.java.CompactedJavaSerializationnativejava=org.apache.dubbo.common.serialize.nativejava.NativeJavaSerializationkryo=org.apache.dubbo.common.serialize.kryo.KryoSerializationkryo2=org.apache.dubbo.common.serialize.kryo.optimized.KryoSerialization2avro=org.apache.dubbo.common.serialize.avro.AvroSerializationprotostuff=org.apache.dubbo.common.serialize.protostuff.ProtostuffSerializationgson=org.apache.dubbo.common.serialize.gson.GsonSerializationprotobuf-json=org.apache.dubbo.common.serialize.protobuf.support.GenericProtobufJsonSerializationprotobuf=org.apache.dubbo.common.serialize.protobuf.support.GenericProtobufSerialization
序列化协议选用原则,通常应该从三方面考虑:
1. 序列化后的二进制序列大小。(IO少) 2. 序列化、反序列化的速率。(CPU少) 3. 兼容性兼容性,比如说你要在XX接口返回值中加一个值,或者参数对象中加入一个值。如果在原接口上直接加会导致原有接口报错,强迫客户版本必须要升级。如果不升级要新加一方法。这是很不舒服的一件事情。
对常用序列化工具相关文章:
协议 | 说明 |
---|---|
hessian2 | dubbo默认《》 |
protostuff | 《》 |
就性能而言protostuff>hessian2
但兼容性方面:- hessian2类似于json,可随意位置加字段。方便
- protostuff只能在类最后加字段。
转载地址:https://blog.csdn.net/y3over/article/details/114849143 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月11日 09时38分54秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux下gedit显示行号
2019-04-27
《Advanced PHP Programming》读书笔记
2019-04-27
让我们谈谈RAID
2019-04-27
jQuery日期选择器插件date-input
2019-04-27
PHP使用curl_multi_add_handle并行处理
2019-04-27
NP问题
2019-04-27
AT&T与Intel汇编语言的比较
2019-04-27
javascript解析json
2019-04-27
WinDbg安装与使用
2019-04-27
推荐阅读的多核编程技术书籍
2019-04-27
维基百科上的算法和数据结构链接很强大
2019-04-27
选择排序
2019-04-27
PHP session回收机制
2019-04-27
最新的全球编程语言,操作系统,web服务器等使用率分析报告
2019-04-27
用C语言写PHP扩展
2019-04-27
PHP Extension programming
2019-04-27
海量数据处理
2019-04-27
PHP防止注入攻击
2019-04-27
多路IO复用模型 select epoll 等
2019-04-27
Linux Epoll介绍和程序实例
2019-04-27