什么是dubbo协议?
本质问题是,什么是dubbo通信协议?
即消费者和提供者之间,到底怎么通信——本质是怎么识别对方的数据。
主要包含几个方面
1、一方在读另一方二进制数据的时候,何时结束?
2、序列化方式?
即对象和二进制的转换。
dubbo框架默认是dubbo协议
但是也可以是http协议
即,dubbo服务支持消费者http请求。所以,这里有几种情况:
1、一般就是dubbo协议
2、也可以是http协议
占用一个新的独立的端口,在dubbo控制台也可以看到。
3、同一个服务,既可以支持dubbo协议,也可以支持http协议
在dubbo控制台的dubbo协议端口和http协议端口,都可以看到该服务。
http协议的应用场景?为什么用了dubbo框架,还要用http协议?
比如,公司里,有的老系统,没有dubbo功能,只有http功能,但是又要调用你的服务,怎么办?
只有支持http协议。
为什么要使用dubbo协议?
因为http协议和dubbo协议都是反着来的,之所以http协议改为dubbo协议,就是为了提高速度。
序列化方式默认是hessian2
每个协议,都有自己的序列化方式。
序列化方式指的是,对象和二进制如何转换。
比如,java有自己的序列化方式,具体来说就是基于Serializable接口和ObjectOutputStream类。
dubbo的序列化方式是hessian2。
通信框架是netty
异步nio
为何异步?提高速度。
为何nio?netty基于nio,还是提高速度。
单一长连接
连接数量:单个连接。
连接方式:长连接。
为何单个连接?复用连接。
为何长连接?还是复用连接。
netty nio,就是复用连接。
完整配置项
代码语言:javascript复制<dubbo:protocol name=“dubbo” port=“9090”
server=“netty” client=“netty”
codec=“dubbo” //dubbo协议
serialization=“hessian2” //序列化方式
charset=“UTF-8”
threadpool=“fixed” threads=“100” queues=“0” iothreads=“9” buffer=“8192”
accepts=“1000” payload=“8388608” />
复制代码
实现原理
所谓的通信协议,其实本质就是,消费者和提供者能互相识别对方的内容。
具体来说就是,对象和二进制的转换。
通信过程,
1、消费者到提供者
对象转化为二进制。
2、提供者把二进制转化为对象
第一步,就是一方在读另一方数据的时候,要知道何时结束?
有几种套路,
1、固定长度
缺点:不灵活。因为一般内容长度都不固定。
2、特殊结束符
缺点:内容不能包含特殊结束符。
3、非固定长度
两部分组成:
1)内容长度
存储内容长度的部分是固定长度的。
2)内容本身
非固定长度,主要是指内容本身的长度不固定。
dubbo协议是非固定长度
详细细节
说明
第二步,就是在结束之后,怎么把二进制数据转换为对象?
二进制转换为对象,就是用哪种序列化方式。
参考
dubbo.apache.org/zh/docs/ref…
dubbo.apache.org/zh/blog/201…
dubbo.apache.org/zh/docs/con…