dubbo协议

2021-12-24 11:38:08 浏览数 (1)

什么是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…

0 人点赞