Dubbo协议详解(特点种类及格式图解)

Dubbo协议详解(特点种类及格式图解)-mikechen

什么是协议

协议,即网络协议的简称,是两个网络实体进行通信的基础,协议是双方确定的交流语义。

协议在双方传输数据中起到的作用,没有协议就无法完成数据交换。

 

Dubbo协议种类

Dubbo内置了:dubbo协议 ,rmi协议,hessian协议,http协议,webservice协议,thrift协议,rest协议,grpc协议,memcached协议,redis协议等10种通讯协议。

Dubbo官网是推荐我们使用Dubbo协议,如果没有特别的需求,也建议使用Dubbo默认协议。

 

Dubbo协议特点

Dubbo 协议采用单一长连接和异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。

  • Dubbo 协议底层网络通信默认使用的是 netty,性能非常优秀,官方推荐使用;
  • Dubbo 协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低;
  • 使用 Dubbo 协议:

 

Dubbo协议格式

Dubbo 框架定义了私有的RPC协议,其中请求和响应协议的具体内容我们使用表格来展示。

Dubbo协议详解(特点种类及格式图解)-mikechen

Dubbo 数据包分为消息头和消息体,消息头用于存储一些元信息,比如魔数(Magic),数据包类型(Request/Response),消息体长度(Data Length)等。消息体中用于存储具体的调用消息,比如方法名称,参数列表等。下面简单列举一下消息头的内容。

偏移量(Bit)

字段

取值

0 ~ 7

魔数高位

0xda00

8 ~ 15

魔数低位

0xbb

16

数据包类型

0 – Response, 1 – Request

17

调用方式

仅在第16位被设为1的情况下有效,0 – 单向调用,1 – 双向调用

18

事件标识

0 – 当前数据包是请求或响应包,1 – 当前数据包是心跳包

19 ~ 23

序列化器编号

2 – Hessian2Serialization 3 – JavaSerialization 4 – CompactedJavaSerialization 6 – FastJsonSerialization 7 – NativeJavaSerialization 8 – KryoSerialization 9 – FstSerialization

24 ~ 31

状态

20 – OK 30 – CLIENT_TIMEOUT 31 – SERVER_TIMEOUT 40 – BAD_REQUEST 50 – BAD_RESPONSE ……

32 ~ 95

请求编号

共8字节,运行时生成

96 ~ 127

消息体长度

运行时计算

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法