什么是协议
协议,即网络协议的简称,是两个网络实体进行通信的基础,协议是双方确定的交流语义。
协议在双方传输数据中起到的作用,没有协议就无法完成数据交换。
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 数据包分为消息头和消息体,消息头用于存储一些元信息,比如魔数(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面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》