引入dubbo项目接口_dubbo接口调用过程中,部分字段值丢失
在工作中,遇到了调用远程dubbo接口,字段值丢失的情况。排查后,发现调用前后的代码无误,主要原因是在接口调用时使用hessian序列化,出现了子类与父类重复字段,导致字段值丢失。
解决办法:将父类重复字段删除即可。
dubbo序列化
先看下序列化和反序列化的概念:
序列化:把对象转换为字节序列的过程称为对象的序列化。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。
为什么要序列化?
序列化模块主要为dubbo协议提供服务提供者和服务消费者之间的数据序列化功能。
dubbo是一种适合于高并发、小数据量的互联网应用场景的框架,
而序列化对于远程调用的响应速度,吞吐量,网络带宽消耗也其中至关重要的作用,是提高分布式系统性能的最关键因素之一。
dubbo框架原生支持四种序列化类型,且与协议一一对应,性能依次下降,分别为:
dubbo序列化:dubbo框架自身实现的一种Java序列化方案,但是不够成熟,不建议在生产环境使用。(二进制序列化)
hessian2序列化(默认):hessian是一种跨语言的高效二进制序列化方式。(二进制序列化),后来新出了一些其他的跨语言序列化方式:Protostuff,ProtoBuf,Thrift,Avro,MsgPack等等
json序列化:目前有两种实现,一种是采用的阿里的fastjson库,另一种是采用dubbo中自己实现的简单json库,但其实现都不是特别成熟,而且json这种文本序列化性能一般不如上面两种二进制序列化。(文本序列化)
jdk序列化:主要是采用JDK自带的Java序列化实现,性能很不理想。专门针对java语言的序列化方式:Kryo,FST
使用Kryo和FST非常简单,只需要在dubbo RPC的XML配置中添加一个属性即可:
在成为Apache孵化项目之后,对序列化方式进行了优化,支持的类型,分别为:fastjson,fst,hessian2,jdk和kryo。
其中fst为完全兼容JDK序列化协议的序列化框架,序列化速度是JDK的4到10倍,大小是JDK的1/3左右。
kryo序列化速度也比JDK的要快,并且大小是JDK的1/10左右。fst和kryo性能普通好于其他序列化方案,生产环境比较推荐使用。
常问面试题
dubbo 支持不同的通信协议
1、dubbo 协议
默认就是走 dubbo 协议,单一长连接,进行的是 NIO 异步通信,基于 hessian 作为序列化协议。使用的场景是:传输数据量小(每次请求在 100kb 以内),但是并发量很高。
为了要支持高并发场景,一般是服务提供者就几台机器,但是服务消费者有上百台,可能每天调用量达到上亿次!此时用长连接是最合适的,就是跟每个服务消费者维持一个长连接就可以,可能总共就 100 个连接。然后后面直接基于长连接 NIO 异步通信,可以支撑高并发请求。
长连接,通俗点说,就是建立连接过后可以持续发送请求,无须再建立连接。
dubbo-keep-connection
而短连接,每次要发送请求之前,需要先重新建立一次连接。
dubbo-not-keep-connection
2、rmi 协议:走 Java 二进制序列化,多个短连接,适合消费者和提供者数量差不多的情况,适用于文件的传输,一般较少用。
3、hessian 协议:走 hessian 序列化协议,多个短连接,适用于提供者数量比消费者数量还多的情况,适用于文件的传输,一般较少用。
4、http 协议:走 json 序列化。
5、webservice:走 SOAP 文本序列化。
dubbo 支持的序列化协议
dubbo 支持 hession、Java 二进制序列化、json、SOAP 文本序列化多种序列化协议。但是 hessian 是其默认的序列化协议。
说一下 Hessian 的数据结构
Hessian 的对象序列化机制有 8 种原始类型:
原始二进制数据
boolean
64-bit date(64 位毫秒值的日期)
64-bit double
32-bit int
64-bit long
null
UTF-8 编码的 string
另外还包括 3 种递归类型:
list for lists and arrays
map for maps and dictionaries
object for objects
还有一种特殊的类型:
ref:用来表示对共享对象的引用。
为什么 PB 的效率是最高的?
其实 PB 之所以性能如此好,主要由于以下两个原因:
1、使用 proto 编译器,自动进行序列化和反序列化,速度非常快,应该比 XML 和 JSON 快上了 20~100 倍;
2、它的数据压缩效果好,就是说它序列化后的数据量体积小。因为体积小,传输起来带宽和速度上会有优化。
:一起学习学习鸭!冲鸭!
引入dubbo项目接口_dubbo接口调用过程中,部分字段值丢失相关推荐
- jsonpath:从庞大的接口返回结果(返回结果为字典类型)中取字段值
从庞大的接口返回结果(返回结果为字典类型)中取字段值,返回结果是list s = {"ec": 0, "errcode": 0, "em": ...
- Visual Studio 2015 安装过程中出现“安装包丢失或损坏”错误的解决方法
Visual Studio 2015 下载链接: 由于官网实在是太慢了,而且有时候还打不开下载页面,所以我这里贴出了链接,大家可以使用迅雷下载(速度杠杠的) 链接:ISO镜像文件 安装方法: 将ISO ...
- 引入dubbo项目接口_Dubbo框架的Hello World
最近写基于 Dubbo 的 Demo,本来挺简单的一个 Demo 但是整了两个小时,而最后解决的方法是因为包名的问题.可能很多所谓的经验不过就是一个踩坑的经验. Dubbo 介绍 Dubbo 的作用引 ...
- 引入dubbo项目接口_通过dubbo暴露接口调用方法,及基于zookeeper的dubbo涉及配置文件...
很流行的Dubbo很多朋友都听说过吧,最近我也在看这方面的东西,分享先我的心得笔记. 先说说我们团队要做的项目框架,很简单重在实现基于zookeeper的dubbo注册. 框架:springmvc+s ...
- 作为项目管理者如何避免项目的延期与执行过程中的加班问题
作为一个项目管理者,最担心的事情就是项目的不能够如期完成:作为一个项目实施者,最担心的是无休无止的加班.项目的不能够如期完成直接导致的是用户或者甲方对公司信誉.能力等各个方面的怀疑与否定,项目实施过程 ...
- java调用构造函数中某一个值_Java如何在枚举的构造函数中调用另一个枚举值
Java中的枚举(enum)是一种存储一组常量值的数据类型.您可以使用枚举来存储固定值,例如一周中的天,一年中的月等. 您可以使用关键字 enum定义枚举,后跟枚举的名称为-enum Days { S ...
- idea 调用c#接口_Dubbo 接口测试方法
一.直接通telnet然后用dubbo协议调用方法 (1)在项目的配置文件中可以看到 dubbo.protocol.port=10022 说明dubbo对外暴漏的端口为10022,直接用telnet访 ...
- 使用openfeign调用报错java.io.IOException: too many bytes written,以及调用过程中参数传递为空等问题
一.报错问题: 使用openfeign调用报错java.io.IOException: too many bytes written, 问题来源:在 Feign 调用拦截器里,当传递头header时, ...
- android JNI调用过程中的方法签名规则
有了数据类型之间的对应关系,JNI就可以正确识别并转换Java类型,但是Java支持方法重载,仅靠函数名是无法唯一确定一个方法的.于是JNI提供了一套签名规则,用一个字符串来唯一确定一个方法.其规则如 ...
最新文章
- Concrete Math 混凝土数学(具体数学)随笔
- python软件是免费的吗-python属于软件吗
- 1339: 考试排名
- knockoutJS学习笔记06:ko数组与模板绑定
- Apache Camel中的断路器模式
- genymotion 极速模拟器
- 目前使用的工具及开发方式
- 敏捷开发系列学习总结(14)——Spotify敏捷模式详解三部曲第二篇:研发过程
- 微信支付商户平台,企业付款,企业向个人付款接口总结
- 迈向高算力、跨域融合新拐点,智能座舱各路玩家如何卡位?
- FishEye Crucible分析
- CSS重置默认样式reset.css代码模板
- FPGA可以转行数字IC验证吗?
- 如何让地面不起灰_水泥地面起灰怎么办?老师傅6招搞定了
- 离线数仓建设及技术选型
- 关于C++ non-aggregate cannot be initialized错误的解决
- 大屏地图背景透明效果,高德地图怎么才能只渲染局部地图,有全部代码详细。
- web前端零基础系统学习路线,每个阶段都需要学什么?
- 三参数坐标转换matlab,Coordinate-conversion
- 在设计电机电路项目中总结的一些电机参数知识和设计要点 - 直流电机、空心杯电机、步进电机、伺服电机等
热门文章
- Spring.NET 中的 ADO.NET 数据访问的示例
- VC编译选项 /EHa 异常处理
- gcc编译出现dlopen、dlerror、dlsym、dlcolse的解决方法
- laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案)
- 【免费下载】2021年4月热门报告盘点下载
- Graph Embedding及其在知乎的实践(附pdf下载链接)
- 【重磅推出】推荐系统系列教程之九:解密“看了又看”和“买了又买”(Item-Based)...
- 程序员如何达到年薪百万?python程序员必读书籍!
- 视觉slam第一讲——
- 经典排序算法及其Python实现