dubbo默认采用netty进行TCP通讯。TCP是传输层协议,在应用层,往往会拓展自定义的协议,一是可以处理TCP本身的粘包拆包问题,二是约定通讯过程的其他细节。
所以dubbo默认采用自定义的dubbo协议。文档描述:
Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。
缺省协议,使用基于netty3.2.5+hessian3.2.1交互。
连接个数:单连接
连接方式:长连接
传输协议:TCP
传输方式:NIO异步传输
序列化:Hessian二进制序列化
适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。
适用场景:常规远程服务方法调用
dubbo协议中对字节流的处理在com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec类中,包含了对request请求的编码和解码,response响应的编码和解码。
dubbo协议采用固定长度的消息头(16字节)和不定长度的消息体来进行数据传输,消息头定义了一些通讯框架netty在IO线程处理时需要的信息。具体dubbo协议的报文格式如下:
dubbo协议报文消息头详解:
magic:类似java字节码文件里的魔数,用来判断是不是dubbo协议的数据包。魔数是常量0xdabb
flag:标志位, 一共8个地址位。低四位用来表示消息体数据用的序列化工具的类型(默认hessian),高四位中,第一位为1表示是request请求,第二位为1表示双向传输(即有返回response),第三位为1表示是心跳ping事件。
status:状态位, 设置请求响应状态,dubbo定义了一些响应的类型。具体类型见com.alibaba.dubbo.remoting.exchange.Response
invoke id:消息id, long 类型。每一个请求的唯一识别id(由于采用异步通讯的方式,用来把请求request和返回的response对应上)
body length:消息体 body 长度, int 类型,即记录Body Content有多少个字节。
最后给大家推荐一个有意思的网站,http://asciiflow.com/。用来做纯文本的画图。文中的图片就是在这个网站上画出来的。
文中如有问题请指正。
相关推荐
标题中的“nodejs使用原生的dubbo协议打通了dubbo的rpc方法调用”意味着在Node.js环境中,开发者成功地实现了对Dubbo服务的RPC(远程过程调用)访问,利用了Dubbo协议的特性。Dubbo是阿里巴巴开源的一个高性能、轻量...
Dubbo协议和Netty框架是构建高性能分布式服务的关键技术,它们在现代企业级应用中扮演着重要角色。Dubbo协议是Dubbo服务框架的核心部分,主要用于实现服务提供者与消费者之间的高效通信。它采用请求-响应模式,支持...
【Dubbo协议模块源码解析1】这节课主要讲解了RPC协议的基本组成和Dubbo框架中支持的多种RPC协议的实现细节。RPC(Remote Procedure Call)协议是分布式系统中实现远程方法调用的关键技术,它定义了服务提供者和服务...
- **报文编码**:分为请求头和请求体,用于将请求和响应转换为网络传输的数据格式。 - **序列化方式**:将对象转换为字节流以便在网络中传输,常见的有Hessian2、Dubbo、Java、Json等。 2. **Dubbo中支持的RPC...
由于Dubbo将这些协议的实现进行了封装了,无论是服务端(开发服务)还是客户端(调用服务),都不需要关心协议的细节,只需要在配置中指定使用的协议即可,从而保证了服务提供方与服务消费方之间的透明。 另外,如果...
6.Dubbo协议模块源码剖析.zip.002
6.Dubbo协议模块源码剖析.zip.001
- 虽然Hessian协议效率高,但其默认的二进制格式并不适合直接查看,因此在调试时可能需要开启日志或使用特殊的查看工具。 - 为了安全,可以考虑对传输的数据进行加密,或者启用HTTPS。 总结来说,"dubbo-hessian...
默认就是⾛ dubbo 协议,单⼀⻓连接,进⾏的是 NIO 异步通信,基于 hessian 作为序列化协议。使⽤的场景是:传输数据量⼩ (每次请求在 100kb 以内),但是并发量很⾼。 为了要⽀持⾼并发场景,⼀般是服务提供者就⼏...
在`dubbo.properties`配置文件中,可以设置服务使用的通信协议,例如默认的dubbo协议。不同的协议会影响服务调用的性能和特性。 5. **负载均衡(Load Balance)** Dubbo内置了几种负载均衡策略,如随机、轮询、...
本项目是一个基于Python实现的接口自动化测试框架,它支持HTTP和Dubbo两种常见的接口协议,使得测试人员能够更加高效地进行接口验证工作。 首先,让我们详细了解一下HTTP接口测试。HTTP(超文本传输协议)是互联网...
3. **协议支持**:Dubbo支持多种通信协议,如基于HTTP的RESTful协议、基于TCP的Dubbo协议、基于RMI的Hessian和 Burlap协议等,可以根据实际需求选择。 4. **负载均衡**:Dubbo内置了多种负载均衡策略,如随机、轮询...
【压缩包子文件的文件名称列表】"dubbo-master"通常表示这是Dubbo项目的主分支或者完整版本,可能包含了Dubbo的所有模块,包括核心库、服务治理模块、协议支持、SPI扩展机制、以及相关的示例和文档。 深入讲解这些...
5. **协议(Protocol)**:Dubbo支持多种通信协议,如Dubbo协议、RMI、HTTP、Hessian等,用于传输服务调用的请求和响应。 6. **集群(Cluster)**:集群负责将多个服务提供者的实例聚合为一个逻辑服务,提供了负载...
《Dubbo生产者消费者使用Demo详解》 Dubbo,作为阿里巴巴开源的一款高性能、轻量级的服务治理框架,已经成为Java世界中分布式服务的重要选择。本文将深入解析如何在实际项目中运用Dubbo,通过一个简单的生产者消费...
软件描述:Dubbo的Jmeter平台插件,用来拓展Jmeter功能,使之支持Dubbo协议接口。使用前,需将下载的jar包放在Jmeter的lib/ext目录下,完成后打开Jmeter在取样器中看到Dubbo Sample,即为生效。
provider里只有dubbo协议就是dubbo,包含rest协议,同时service接口直接可以浏览器等rest访问就是dubbox,不再需要controller写requestmapping路径转发,详见事例:https://git.oschina.net/feiyangziyun/dubbox ...
案例代码为springcloud-libaba整合dubbo同时也整合了openfeign,消费方可以通过两种方式调用服务提供方的接口,代码下载后简单修改下数据库链接可以直接运行起来,如果运行时有任何问题可以私信我;
Dubbo 3.0 是 Dubbo 框架的最新版本,相比之前的版本,Dubbo 3.0 提供了许多新的特性和改进,例如增强的服务治理能力、改进的性能、支持更多的协议等。Dubbo 3.0 也提供了更好的可扩展性和灵活性,使得开发者可以更...
#### 四、Dubbo协议选择及配置 Dubbo支持多种通信协议,包括`dubbo`、`rest`、`hessian`、`http`等,每种协议都有其适用场景。 **1. dubbo协议** - **特点**:专为Dubbo设计,性能最优。 - **配置示例**: ```...