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

news2024/12/23 17:15:45

文章目录

文章说明

一:序列化概念

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,接口下有具体的序列化实现方案。

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)交换数据,但他体积更小。短整形被编码成为一个字节)。

 

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

二:Kyro序列化方案

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

1:引入依赖

        <dependency>
            <groupId>org.apache.dubbo.extensions</groupId>
            <artifactId>dubbo-serialization-kryo</artifactId>
            <version>1.0.1</version>
        </dependency>

2:XML的配置方式

    <dubbo:protocol name="dubbo" port="20880" server="kyro"/>

3:Boot的方式

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

4:Consumer端调用

<dubbo:reference interface="com.suns.service.UserService" id="userService"
url="dubbo://192.168.8.1:20880/com.suns.service.UserService?serialization=kyro"/>

补充说明:

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

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

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

三:FST序列化方式使用

1:引入依赖

        <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-serialization-fst</artifactId>
             <version>2.7.23</version>
             <exclusions>
                 <exclusion>
                     <artifactId>dubbo-common</artifactId>
                     <groupId>org.apache.dubbo</groupId>
                 </exclusion>
             </exclusions>
         </dependency>

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

2:XML的配置方式

<dubbo:protocol name="dubbo" port="-1" serialization="fst"/>

3:SpringBoot的配置方式

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

4: Consumer端调⽤

<dubbo:reference id="userService" interface="com.suns.service.UserServ
ice" url="dubbo://192.168.50.62:20880/com.suns.service.UserService?serial
ization=fst"/>

如果是基于注解的方式:

@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&timestamp=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&timestamp=1691596862730, dubbo version: 3.2.0, current host: 192.168.8.1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/856554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM 调优实例

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ JVM提供了多种垃圾回收器&#xff0c;可以根据应用程序的需求选择最适合的垃圾回收器。例如&#xff0c;如果应用程序需要更快的响应时间&#xff0c;可以选择并行垃圾回收…

GIS在地质灾害危险性评估与灾后重建中的应用教程

详情点击链接&#xff1a;GIS在地质灾害危险性评估与灾后重建中的实践技术应用 前言 地质灾害是指全球地壳自然地质演化过程中&#xff0c;由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下&#xff0c;地质…

【JavaSE】接口的语法知识和使用方法总结

目录 1. 接口的概念 2. 语法规则 3. 接口特性 4. 接口使用 5. 实现多个接口 6. 接口间的继承 1. 接口的概念 在现实生活中&#xff0c;接口的例子比比皆是&#xff0c;比如&#xff1a;笔记本上的USB口&#xff0c;电源插座等。 电脑的USB口上&#xff0c;可以插&#x…

Unity游戏源码分享-仿开心消消乐Match3Jewel

Unity游戏源码分享-仿开心消消乐Match3Jewel 工程地址&#xff1a; https://download.csdn.net/download/Highning0007/88198762

蚁剑antSword-maste下载-安装-使用-一句话木马

下载 https://github.com/AntSwordProject/antSword 一句话木马 hack.php脚本 <?php eval($_POST[attack]);?> 安装 1、安装完成后启动 2、初始化&#xff0c;选择有源码的目录 3、连接

为什么要使用融合CDN,单CDN与多CDN之间的差异对比

CDN是现代互联网服务的重要组成部分&#xff0c;它CDN可帮助内容提供者高速交付内容&#xff0c;不同的服务器部署在全球不同的数据中心&#xff0c;并在它们之间共享相同的网络路径。随着企业意识到CDN的重要性&#xff0c;越来越多的企业正在使用CDN作为内容分发工具。互联网…

RocketMQ发送消息失败:error CODE: 14 DESC: service not available now, maybe disk full

在执行业务时&#xff0c;发现MQ控制台没有查询到消息&#xff0c;在日志中发现消息发送失败&#xff0c;报错error CODE: 14 DESC: service not available now, maybe disk full 分析报错应该是磁盘空间不足&#xff0c;导致broker不能进行正常的消息存储刷盘&#xff0c;去查…

Java中数组分析

Java中数组分析 先进行专栏介绍 数组声明和初始化一个数组方法一&#xff1a;声明数组并分配空间&#xff1a;可以使用以下语法声明一个数组&#xff0c;并指定数组的长度。举例 方法二&#xff1a;声明数组并初始化元素&#xff1a;可以在声明数组时&#xff0c;同时为数组的元…

HOperatorSet.OpenFramegrabber “GigEVision“

HOperatorSet.OpenFramegrabber "GigEVision"访问失败 直接跳出 但其他算子可以访问 重装halcon x86

内网隧道—HTTP\DNS\ICMP

本文仅限于安全研究和学习&#xff0c;用户承担因使用此工具而导致的所有法律和相关责任&#xff01; 作者不承担任何法律和相关责任&#xff01; HTTP隧道 Neo-reGeorg Neo-reGeorg 是一个旨在积极重构 reGeorg 的项目&#xff0c;目的是&#xff1a; 提高可用性&#xff0…

量化交易可视化(7)-散点图

散点图的含义 散点图是一种用于观察两个变量之间关系的图表类型。它通过在坐标轴上绘制数据点来展示变量之间的关联程度。每个数据点代表一个观测值&#xff0c;其中横轴表示一个变量的值&#xff0c;纵轴表示另一个变量的值。 散点图的绘制方法 matplotlib.pyplot.scatter(…

Java:企业级java后端开发,需要掌握哪些内容

一、什么是后端开发 后端开发是指开发基于服务器端的软件应用程序&#xff0c;也称为系统的后台或服务器端编程。 后端程序员负责处理网站或应用程序后台的逻辑和功能&#xff0c;包括数据库管理、服务器端脚本编写、API设计、数据安全性、网站性能优化等。 后端开发技术通常包…

position 属性有哪些值,分别表示什么意思?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ static&#xff08;静态定位&#xff09;⭐ relative&#xff08;相对定位&#xff09;⭐ absolute&#xff08;绝对定位&#xff09;⭐ fixed&#xff08;固定定位&#xff09;⭐ sticky&#xff08;粘性定位&#xff09;⭐ initial⭐ i…

机器视觉、图像处理和计算机视觉:概念和区别

机器视觉、图像处理和计算机视觉是相关但有区别的概念。 机器视觉主要应用于工业领域&#xff0c;涉及图像感知、图像处理、控制理论和软硬件的结合&#xff0c;旨在实现高效的运动控制或实时操作。 图像处理是指利用计算机对图像进行复原、校正、增强、统计分析、分类和识别…

【在一个升序数组中插入一个数仍升序输出】

在一个升序数组中插入一个数仍升序输出 题目举例&#xff1a; 有一个升序数组nums&#xff0c;给一个数字data&#xff0c;将data插入数组nums中仍旧保证nums升序&#xff0c;返回数组中有效元素个数。 比如&#xff1a;nums[100] {1, 2, 3, 5, 6, 7, 8, 9} size 8 data 4 …

【雕爷学编程】Arduino动手做(201)---DFRobot 行空板05

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

【雕爷学编程】Arduino动手做(199)---8x32位WS2812B全彩屏模块7

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

Shopify平台Fulfillment业务模块升级

上图是销售订单、发货单与配送之间的关系图&#xff0c;销售订单可以创建多个发货单&#xff0c;多个发货单(不同销售订单)可以合并在一个配送订单进行发货 接口请求错误记录: 1. The api_client does not have the required permission(s). 2. Required parameter missing or…

dirsearch_暴力扫描网页结构

python3 dirsearch 暴力扫描网页结构&#xff08;包括网页中的目录和文件&#xff09; 下载地址&#xff1a;https://gitee.com/xiaozhu2022/dirsearch/repository/archive/master.zip 下载解压后&#xff0c;在dirsearch.py文件窗口&#xff0c;打开终端&#xff08;任务栏…

FPGA外部触发信号毛刺产生及滤波

1、背景 最近在某个项目中&#xff0c;遇到输入给FPGA管脚的外部触发信号因为有毛刺产生&#xff0c;导致FPGA接收到的外部触发信号数量多于实际值。比如&#xff1a;用某个信号源产生1000个外部触发信号&#xff08;上升沿触发方式&#xff09;给到FPGA输入IO&#xff0c;实际…