干翻Dubbo系列第十二篇:Dubbo协议介绍

文章目录

文章说明

一:Dubbo协议

1:Dubbo协议简介

2:Dubbo协议优点

 3:Dubbo协议帧的组成

(一):幻数

(二):2Way

(三):event

(四):Serilization ID

(五):status

(六):RequestID

(七):数据长度


文章说明


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

一:Dubbo协议

Rpc过程当中三个核心的要素就是:协议 序列化  通信方式

1:Dubbo协议简介

Dubbo协议是Dubbo定义的私有化协议。也是Dubbo默认的协议,我们在不进行任何设置的情况下Dubbo使用的协议就是Dubbo协议,默认的序列化范式就是Hessian2,当然在3.2之后的Dubbo版本切换为了FastJson2,Dubbo的默认的通信方式是Netty4。

不同的协议,支持的通信方式是不一样的。我们的dubbo协议走的是TCP层,他的通信方式就是Netty或者Mina,当我们后续将Rest协议的时候,他的序列化方式使用的就是JSON或者XML的方式了,它的通讯方式就是Jetty或者是Tomat这种服务器的通信方式。

不同的协议+序列化方式组合+通信方式对应的通信效率是天差地别的。他们对应的执行效率,也就是:响应时间、TPS和QPS也是天查地别的。

2:Dubbo协议优点

Dubbo协议最大的特点是什么呢?他是一个长链接异步通信的方式,他和我们Netty里边Futrure和Promise的情况是可以画等号的。这种情况适用于,小数据量大并发的数据调用。他不适合大数据量的服务比如:传输文件和视频。日常常规的调用,数据量比较小,兵法比较高,使用Dubbo协议是比较合适的。

 3:Dubbo协议帧的组成

 所谓协议帧的组成,就是协议描述了通信双方,在通信内容传输过程中达成的传输单位(帧)的约定。在这个帧的信息里边,那些是头信息,那些是体信息?实际上整个帧的结构。

不同的协议是不一样的,但是基本的内容是一致的,都包括头信息和体信息。Dubbo协议的帧信息里边,幻数,序列化方式,操作的方向性,状态信息和数据大小信息,这些内容都有,以及这些操作内容占多大的空间。

(一):幻数

幻数:幻数这个内容分为幻术高位和幻数地位,总共占据16个bit。0xdabb这是一个16进制的数字,他的作用标识了这是Dubbo协议的标准帧,有了这个标识才能被认定为这是客户端给服务端发送的一个标准的帧,他的作用就类似于Java中class文件的cafababe。

req和res占用了1bit的空间,表达的是这是请求的数据还是相应的数据,如果是请求的数据则是1,如果是响应的数据则是0,这个就代表了,咱们前边提到的操作的方向性。

(二):2Way

这个标志位只能在req是1的时候,它的含义代表了我们期望服务器给我们的返回值是有值还是没值的情况。1是有值。

(三):event

事件,这个可以告诉付服务端,我们这是一个普通的请求信息,还是心跳事件,如果是心跳事件的话,这里会是1

(四):Serilization ID

序列化协议,如果是FastJson2的话,这里应该是6.

(五):status

20 - OK
30 - CLIENT_TIMEOUT
31 - SERVER_TIMEOUT
40 - BAD_REQUEST
50 - BAD_RESPONSE
60 - SERVICE_NOT_FOUND
70 - SERVICE_ERROR
80 - SERVER_ERROR
90 - CLIENT_ERROR
100 - SERVER_THREADPOOL_EXHAUSTED_ERROR

(六):RequestID

给我们请求一个编号,占用64bit,是一个Long值。

(七):数据长度

Data Length (32)数据长度

这个数据长度的大小是必须要给的,只有给了这个数据长度的大小,我们才可以顺利的解决半包和粘包问题。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++进阶】继承、多态的详解(多态篇)

【C进阶】继承、多态的详解(多态篇) 目录 【C进阶】继承、多态的详解(多态篇)多态的概念多态的定义及实现多态的构成条件(重点)虚函数虚函数的重写(覆盖、一种接口继承)C11 override…

常见指令以及权限理解

常见指令以及权限理解 命令格式: command [-options] parameter1 parameter1 命令 选项 参数1 参数2 1.command为命令名称,例如变化目录的cd等 2.中括号[ ]实际在命令中是不存在的,这个中括号代表可选,通常选项前面会添加一个符号…

K8S deployment挂载

挂载到emptyDir 挂载在如下目录,此目录是pod所在的node节点主机的目录,此目录下的data即对应容器里的/usr/share/nginx/html,实现目录挂载;图1红框里的号对应docker 的name中的编号,如下俩个图 apiVersion: apps/v1 k…

Sentinel规则持久化

首先 Sentinel 控制台通过 API 将规则推送至客户端并更新到内存中,接着注册的写数据源会将新的规则保存到本地的文件中。 示例代码: 1.编写处理类 //规则持久化 public class FilePersistence implements InitFunc {Value("spring.application:n…

Qt应用开发(基础篇)——高级纯文本窗口 QPlainTextEdit

一、前言 QPlainTextEdit类继承于QAbstractScrollArea,QAbstractScrollArea继承于QFrame,是Qt用来显示和编辑纯文本的窗口。 滚屏区域基类https://blog.csdn.net/u014491932/article/details/132245486?spm1001.2014.3001.5501框架类QFramehttps://blo…

服务器数据库中了360后缀勒索病毒怎么办?360后缀勒索病毒的加密形式

随着信息技术的发展,企业的计算机服务器数据库变得越来越重要。然而,在数字时代,网络上的威胁也日益增多。近期,我们收到很多企业的求助,企业的计算机服务器遭到了360后缀勒索病毒的攻击,导致服务器内的所有…

【计算机视觉】相机基本知识(还在更新)

1.面阵工业相机与线阵工业相机 1.1 基本概念区别 面阵相机则主要采用的连续的、面状扫描光线来实现产品的检测; 线阵相机即利用单束扫描光来进行物体扫描的工作的。 1.2 优缺点 (1)面阵CCD工业相机: 优点:应用面…

Maven - 统一构建规范:Maven 插件管理最佳实践

文章目录 Available Plugins开源项目中的使用插件介绍maven-jar-pluginmaven-assembly-pluginmaven-shade-pluginShade 插件 - 标签artifactSetrelocationsfilters 完整配置 Available Plugins https://maven.apache.org/plugins/index.html Maven 是一个开源的软件构建工具&…

图数据库_Neo4j和SpringBoot整合使用_创建节点_删除节点_创建关系_使用CQL操作图谱---Neo4j图数据库工作笔记0009

首先需要引入依赖 springboot提供了一个spring data neo4j来操作 neo4j 可以看到它的架构 这个是下载下来的jar包来看看 有很多cypher对吧 可以看到就是通过封装的驱动来操作graph database 然后开始弄一下 首先添加依赖

核能的发展与应用

目录 1.核能的概念 2.核能的实现原理 3.核能的利与弊 4.核能未来的发展趋势 1.核能的概念 核能是指利用核反应过程中释放出的能量来产生电力或其他形式能量的能源形式。核能主要通过核裂变和核聚变两种方式产生。 1. 核裂变:核裂变是指重核(通常是铀、…

ElementUI 树形表格的使用以及表单嵌套树形表格的校验问题等汇总

目录 一、树形表格如何添加序号体现层级关系 二、树形表格展开收缩图标位置放置,设置指定列 三、表单嵌套树形表格的校验问题以及如何给校验rules传参 普通表格绑定如下:这种方法只能校验表格的第一层,树形需要递归设置子级节点prop。 树…

如何保证数据传输的安全?

要确保数据传输的安全,您可以采取以下措施: 使用加密协议:使用安全的传输协议,如HTTPS(HTTP over SSL/TLS)或其他安全协议,以保护数据在传输过程中的安全性。加密协议可以有效防止数据被窃听或篡改。 强化身份验证&…

计算机网络基础

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页:KC老衲爱尼姑的博客主页 博主的github,平常所写代码皆在于此 共勉:talk is cheap, show me the code 作者是爪哇岛的新手,水平很有限&…

【hive】hive中row_number() rank() dense_rank()的用法

hive中row_number() rank() dense_rank()的用法 一、函数说明 主要是配合over()窗口函数来使用的,通过over(partition by order by )来反映统计值的记录。 rank() over()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)dense_rank() …

设计模式——适配器模式

引入实例 说起适配器其实在我们的生活中是非常常见的,比如:学校的宿舍的电压都比较低,而有的学生想使用大功率电器,宿舍的就会跳闸,然而如果你使用一个适配器(变压器)就可以使用了(…

搭建openGauss 5.0 一主一从复制集群

openGauss是一款支持SQL2003标准语法,支持主备部署的高可用关系型国产数据库。 多种存储模式支持复合业务场景,新引入提供原地更新存储引擎。NUMA化数据结构支持高性能。Paxos一致性日志复制协议,主备模式,CRC校验支持高可用。支…

golang操作excel的高性能库——excelize/v2

目录 介绍文档与源码安装快速开始创建 Excel 文档读取 Excel 文档打开数据流流式写入 [相关 Excel 开源类库性能对比](https://xuri.me/excelize/zh-hans/performance.html) 介绍 Excelize是一个纯Go编写的库,提供了一组功能,允许你向XLAM / XLSM / XLS…

【【STM32之GPIO】】

STM32之GPIO 学完了正点原子自带的视频课之后感觉仍然一知半解现在更新一下来自其他版本的STM32学习 GPIO 就是 General Purpose Input Output 中文名叫通用输入输出口 可配置8种输入输出模式 引脚电平 0V~3.3V 部分引脚可容忍5V 输出模式下可控制端口输出高低电平&#xff…

【Spring Cloud 二】——Spring Cloud基本介绍

Spring Cloud基本介绍 一、Spring Cloud简介二、Spring Cloud核心组件Spring Cloud Netflix组件Spring Cloud Alibaba组件Spring Cloud原生组件微服务架构图 三、Spring Cloud与Spirng Boot的关系四、Spring Cloud的版本选择Spring Cloud Alibaba的版本选择 一、Spring Cloud简…

从外部访问K8s中Pod的五种方式

hostNetwork、 hostPort、 NodePort、 LoadBalancer、 Ingress 暴露Pod与Service一样,因为Pod就是Service的backend 1、hostNetwork:true 这是一种直接定义 Pod 网络的方式。 如果在 Pod 中使用 hostNetwork:true 配置, pod 中运行的应用程序…