干翻Dubbo系列第九篇:Dubbo体系中序列化详解

文章目录

文章说明

一:序列化概念

1:概念

2:Dubbo中序列化方式

二:Kyro序列化方案

1:引入依赖

2:XML的配置方式

3:Boot的方式

4:Consumer端调用

三:FST序列化方式使用

1:引入依赖

2:XML的配置方式

3:SpringBoot的配置方式

4: Consumer端调⽤


文章说明

本文内容整理自《孙哥说Dubbo系列视频课程》,孙帅老师课程细致、全面、深入、性价比极高。B站搜孙帅suns可以找到对应的试听视频,或者直接添加老师微信号suns45与他直接联系

一:序列化概念

1:概念

序列化是RPC的时候,将需要传输的内容,按照一定方式转换为二进制的过程,这也是编码的过程。同样将这样的二进制数据解码的过程,也叫反序列化。

不要小看这个过程,好的序列化方案,就好比人说话,三个字能表达清楚的含义绝对不需要写一篇小作文,这样做最大的好处就是节省了带宽,提升了传输效率。

Dubbo设计序列化的时候,设计了一个接口Serialization,接口下有具体的序列化实现方案。

干翻Dubbo系列第九篇:Dubbo体系中序列化详解_第1张图片

2:Dubbo中序列化方式

1:JDK的序列化方式

2:Hessian2  Hessian序列化方式第二个版本, Dubbo自己的序列化方式,Dubbo默认方案

3:Dubbo序列化  阿里尚未开发成熟的一种高效率序列化方案,阿里不建议在生产环境使用。

4:基于Json的序列化方式。目前有两种方案,一种是采用阿里的FastJson库,另外一种是采用dubbo中自己实现的简单json库,使用这种序列化方式,基本上使用的都是http协议。

5:Kryo   Java序列化方式,后续替换Hessian2一种非常成熟的序列化实现。相对比较新

6:FST    Java序列化方式,后续替换Hessian2会中非常成熟的序列化方案。相对比较新

7:跨语言序列化方式:ProtoBuf (性能最优),Thrift ,Avro(大数据),(MsgPackage是一种有效的二进制格式,允许在多种语言(如Json)交换数据,但他体积更小。短整形被编码成为一个字节)。

 干翻Dubbo系列第九篇:Dubbo体系中序列化详解_第2张图片

已完成。 了解不同序列化方案,通信。

二:Kyro序列化方案

Kyro序列化方案,Dubbo是不支持的,所以想要使用这种序列化方案,需要引入对应的Jar包。

1:引入依赖

        
            org.apache.dubbo.extensions
            dubbo-serialization-kryo
            1.0.1
        

2:XML的配置方式

    

3:Boot的方式

dubbo:
    protocol:
        name: dubbo
        port:-1
        serialization:kryo

4:Consumer端调用

补充说明:

Provider启动成功后可以看到Export日志的中URL地址后边?拼接上了serialization=kyro这就代表了指定了序列化方案为kyro。

后续如果使用注册中心的话,上述配置中的URL就可以不写了。如果不用注册中心的话,Consumer的调用的需要写上URL和序列化方式的。

从上图中我们可以看到Kyro的这种序列化方式是非常棒的,后续我们也建议使用这种序列化方式。

三:FST序列化方式使用

1:引入依赖

        
             org.apache.dubbo
             dubbo-serialization-fst
             2.7.23
             
                 
                     dubbo-common
                     org.apache.dubbo
                 
             
         

补充说明: 经过验证,这块排除其实是没有必要的,因为Dubbo的jar包当中并没有依赖dubbo-common,所以不存在该依赖项的冲突。

2:XML的配置方式

3:SpringBoot的配置方式

dubbo:
    protocol:
        name: dubbo
        port: -1
        serialization: fst

4: Consumer端调⽤


如果是基于注解的方式:

@DubboReference(url = "dubbo://192.168.50.62:20880/com.suns.service.Us
erService?serialization=fst")

补充说明:

Provider启动成功后可以看到Export日志的中URL地址后边?拼接上了serialization=fst这就代表了指定序列化方案为fst

后续如果使用注册中心的话,上述配置中的URL就可以不写了。如果不用注册中心的话,Consumer的调用的需要写上URL和序列化方式的。

Fst序列化方式很高,可以替换Hessian2但是,现在比较新的序列化方式,但是没有大厂敢用,没有成熟案例。真正实战的时候,建议还是使用kyro。

关于Dubbo默认序列化的版本问题:3.2.0之前默认的是Hessian2的方式,3.2.0之后,默认就是FastJson2的方式了

prefer.serialization=fastjson2,hessian2

00:01:03.745 [main] INFO org.apache.dubbo.config.ServiceConfig -  [DUBBO] Export dubbo service com.suns.service.UserService to local registry url : injvm://127.0.0.1/com.suns.service.UserService?anyhost=true&application=dubbo-02-provider&background=false&bind.ip=192.168.8.1&bind.port=20880&deprecated=false&dubbo=2.0.2&dynamic=true&executor-management-mode=isolation&exporter.listener=injvm&file-cache=true&generic=false&interface=com.suns.service.UserService&methods=login&pid=2396&prefer.serialization=fastjson2,hessian2&release=3.2.0&side=provider×tamp=1691596862730, dubbo version: 3.2.0, current host: 192.168.8.1

00:01:03.745 [main] INFO org.apache.dubbo.config.ServiceConfig -  [DUBBO] Export dubbo service com.suns.service.UserService to url dubbo://192.168.8.1:20880/com.suns.service.UserService?anyhost=true&application=dubbo-02-provider&background=false&bind.ip=192.168.8.1&bind.port=20880&deprecated=false&dubbo=2.0.2&dynamic=true&executor-management-mode=isolation&file-cache=true&generic=false&interface=com.suns.service.UserService&methods=login&pid=2396&prefer.serialization=fastjson2,hessian2&release=3.2.0&side=provider×tamp=1691596862730, dubbo version: 3.2.0, current host: 192.168.8.1

你可能感兴趣的:(dubbo)