Dubbo 序列化

Dubbo 序列化

1、什么是序列化和反序列化

序列化(serialization)在计算机科学的资料处理中,是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓冲,或经由网络中发送),以留待后续在相同或另一台计算机环境中,能恢复原先状态的过程。依照序列化格式重新获取字节的结果时,可以利用它来产生与原始对象相同语义的副本。对于许多对象,像是使用大量引用的复杂对象,这种序列化重建的过程并不容易。面向对象中的对象序列化,并不概括之前原始对象所关系的函数。这种过程也称为对象编组(marshalling)。从一系列字节提取数据结构的反向操作,是反序列化(也称为解编组、deserialization、unmarshalling)。

2、Dubbo 序列化

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

在这里插入图片描述

1、JDK 的序列化方式

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

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

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

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

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

3、FastJson2 序列化方式

1、引入依赖

    <dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.23</version></dependency>

2、XML 的配置方式

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

3、SpringBoot 的配置方式

dubbo:protocol:name: dubboport: -1serialization: fastjson2

4、Consumer 端

<dubbo:reference interface="com.suns.service.UserService" id="userService" url="dubbo://192.168.50.62:20880/com.suns.service.Use
rService?serialization=fastjson2"/>

在这里插入图片描述

4、 实现原理

通过源码的方式分析它们的实现原理。下面我们直接到序列化的核心类org.apache.dubbo.remoting.transport.CodecSupport我们看其中的反序列化方法deserialize

 public static ObjectInput deserialize(URL url, InputStream is, byte proto) throws IOException {//获取序列化对象     Serialization s = getSerialization(url, proto);return s.deserialize(url, is);}

getSerialization方法:

 public static Serialization getSerialization(URL url, Byte id) throws IOException {//通过协议查找Serialization对象Serialization serialization = getSerializationById(id);String serializationName = url.getParameter(Constants.SERIALIZATION_KEY, Constants.DEFAULT_REMOTING_SERIALIZATION);//...return serialization;}

上面查找通过 SPI 注册的所有序列化方式。我们接着deserialize方法看,这里我们以 Java JDK 提供的序列化方式为例:

    public ObjectInput deserialize(URL url, InputStream is) throws IOException {return new JavaObjectInput(is);}

可以看到通过 JDK 提供的 JavaObjectInput 对象包装数据流。 其他的序列化方式也是类似

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

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

相关文章

SVN客户端异常问题处理

1、如遇svn服务端异常&#xff08;所有用户登录不上&#xff09; &#xff08;1&#xff09;登录192.168.**.**服务器&#xff0c;找到E:\仓库所在盘\VisualSVN-GlobalWinAuthz.ini &#xff08;2&#xff09;先备份VisualSVN-GlobalWinAuthz.ini文件 &#xff08;3&#xf…

Python-06-选择结构、循环

目录 1、选择结构 1.1 多分支结构语法结构 2、循环结构 2.1 遍历循环for的语句结构&#xff1a; 2.2 遍历字符串 1、选择结构 1.1 多分支结构语法结构 if 表达式1: #语句块1 elif 表达式2: #语句块2 elif 表达式n: #语句块n scoreeval(input(请输入您…

内网穿透的应用-如何使用Docker本地部署Dify LLM结合内网穿透实现公网访问本地开发平台

文章目录 1. Docker部署Dify2. 本地访问Dify3. Ubuntu安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 本文主要介绍如何在Linux Ubuntu系统以Docker的方式快速部署Dify,并结合cpolar内网穿透工具实现公网远程访问本地Dify&#xff01; Dify 是一款…

注意力机制篇 | YOLOv8改进之清华开源ACmix:自注意力和CNN的融合 | 性能速度全面提升

前言:Hello大家好,我是小哥谈。混合模型ACmix将自注意力机制和卷积神经网络进行整合,使其同时具有自注意力机制和卷积神经网络的优点。这是清华大学、华为和北京人工智能研究院共同发布在2022年CVPR中的论文。ACmix结合了自注意力机制和卷积神经网络的优势,以提高模型的性能…

上市公司探索式创新词频数据(1991-2022年)

数据来源&#xff1a;上市公司年报 时间跨度&#xff1a;1991-2022年 数据范围&#xff1a;上市公司 数据数量&#xff1a;51610条 数据指标及样例数据&#xff1a; 探索 搜索 变化 冒险 试验 灵活性 发掘 革新 年份股票代码公司名称总词频对数探索搜索变化冒险试验灵…

记录Http访问服务接口出现 301 Moved Permanently

记录Http访问服务接口出现 301 Moved Permanently 一、项目背景 ​ 在A服务中 需要通过远程调用 B服务接口 获取数据。A项目与B项目部署在不同的服务接口中。 请求接口响应界面 ​ 在调用B项目的接口时&#xff0c;响应的数据一直为 301 Moved Permanently Html代码&#x…

docker容器重启故障

docker容器重启故障 强杀docker进程后&#xff0c;重启docker。docker中的容器无法启动并报错 docker restart XXXXXXX Error response from daemon: Cannot restart container XXXXXXX: container ‘XXXXXXXXXXXXXXXX’: already exists 原因&#xff1a;旧容器未安全退出 解…

原生js 在b.html 读取a.html文件内容,并添加到b.html的部分位置

1、第一种方式XMLHttpReques t var xhr new XMLHttpRequest(); xhr.open("GET", "a.html", true); xhr.onreadystatechange function () {if (xhr.readyState 4 && xhr.status 200) {var content xhr.responseText;// 将内容添加到 b.html …

Vue3 使用ElementUI 显示异常

element提供的样例不能正常显示&#xff0c;需要进行配置 1.npm install element-plus --save 2.main.js // main.ts import { createApp } from vue import ElementPlus from element-plus //全局引入 import element-plus/dist/index.css import App from ./App.vue const …

道可云文旅元宇宙平台:全面赋能文旅产业数字化转型

随着科技的迅猛发展&#xff0c;元宇宙、人工智能和虚拟数字人等技术逐渐成为推动社会进步的重要力量。在这一背景下&#xff0c;道可云文旅元宇宙平台以其独特的创新理念和前沿技术&#xff0c;为数字文博领域带来了革命性的变革。 道可云文旅元宇宙平台运用先进的元宇宙、人…

了解google的SerpApi是个啥

SerpApi是一个实时API&#xff0c;可以访问Google搜索结果。它为客户处理代理、解决验证码问题&#xff0c;并解析所有丰富的结构化数据。这个API让用户可以轻松地获取Google搜索结果&#xff0c;而无需直接与Google搜索进行交互&#xff0c;也不需要处理复杂的爬虫和验证码问题…

[2024年4月最新]Python安装教程

一、Python下载 1、进入Python官网 官网地址&#xff1a;https://www.python.org 2、点击【Downloads】展开后点击【Windows】跳转到下载python版本页面&#xff0c;选择"Stable Releases"稳定版本&#xff0c;我下载的是Python 3.10.10版本&#xff0c;所以找到【…

JavaScript教程(四)--- 函数

函数 函数是 JavaScript 中的基本组件之一。JavaScript 中的函数类似于过程——一组执行任务或计算值的语句。但要成为函数&#xff0c;这个过程应该接受输入并返回与输入存在某些明显关系的输出。要使用一个函数&#xff0c;你必须将其定义在你希望调用它的作用域内。 定义函…

[xboard]real6410-6.1 移植kernel 5.4.272

文章目录 获取源码方法一方法二方法三了解S3C6410内核相关1 设备文件2 mach-文件3 plat-文件配置real6410编译镜像测试问题1获取源码 方法一 进入官网,如下界面,点击http, 再依次

IPV6的相关网络问题

问题 ​​​​​​​ 目录 问题 一.什么是NAT64转换 1.NAT64的工作原理 IPv6到IPv4转换 IPv4到IPv6的响应转换 2.NAT64的优点 3.NAT64的缺点 二.NAT64转换如何实现 1.工作原理 2.实现步骤 DNS查询转换&#xff08;DNS64&#xff09; 地址转换&#xff08;NAT64&a…

Ubuntu 20.04 永久修改 最大文件打开数量和最大线程数量

目录 一、查看设置 二、永久设置 三、验证测试 操作系统&#xff1a;Ubuntu 20.04.5 LTS 我们在Ubuntu 20.04系统上&#xff0c;永久修改“最大文件打开数量”open files和“最大线程数量”max user processes。 一、查看设置 查看当前用户的设置 ulimit -a open files 是…

掌握ChatGPT技巧:写作论文如虎添翼

ChatGPT无限次数:点击直达 掌握ChatGPT技巧&#xff1a;写作论文如虎添翼 引言 在当今信息爆炸的时代&#xff0c;论文写作成为每个研究者必不可少的重要技能。然而&#xff0c;有时候我们可能会遇到灵感枯竭、思路不清晰的困境。幸运的是&#xff0c;随着人工智能技术的不断…

BTI的启用与构建

BTI分支目标识别精讲与实践系列 思考 1、什么是代码重用攻击&#xff1f;什么是ROP攻击&#xff1f;区别与联系&#xff1f; 2、什么是JOP攻击&#xff1f;间接分支跳转指令&#xff1f; 3、JOP攻击的缓解技术&#xff1f;控制流完整性保护&#xff1f; 4、BTI下的JOP如何…

三行命令解决Ubuntu Linux联网问题

本博客中Ubuntu版本为23.10.1最新版本&#xff0c;后续发现了很多问题我无法解决&#xff0c;已经下载了另外一个版本22.04&#xff0c;此版本自带网络 一开始我找到官方文档描述可以通过命令行连接到 WiFi 网络&#xff1a;https://cn.linux-console.net/?p10334#google_vig…

Docker容器(六)网络配置与数据卷

一、高级网络配置 1.1概述 当 Docker 启动时&#xff0c;会自动在主机上创建一个 docker0 虚拟网桥&#xff0c;实际上是 Linux 的一个 bridge&#xff0c;可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。 同时&#xff0c;Docker 随机分配一个本地未占用的私有…