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 head hessian body) 协议打通了 dubbo 的 rpc 方法调用 .
Dubbo是一个开源的分布式服务框架,旨在帮助开发人员快速而简单...总之,Dubbo协议和Netty框架是实现Dubbo框架的两个关键要素,Dubbo协议实现了分布式应用程序之间的通信,而Netty框架提供了高性能的网络应用程序框架。
接口自动化测试框架——python版,支持HTTP,dubbo协议接口
由于Dubbo将这些协议的实现进行了封装了,无论是服务端(开发服务)还是客户端(调用服务),都不需要关心协议的细节,只需要在配置中指定使用的协议即可,从而保证了服务提供方与服务消费方之间的透明。 另外,如果...
6.Dubbo协议模块源码剖析.zip.002
6.Dubbo协议模块源码剖析.zip.001
默认就是⾛ dubbo 协议,单⼀⻓连接,进⾏的是 NIO 异步通信,基于 hessian 作为序列化协议。使⽤的场景是:传输数据量⼩ (每次请求在 100kb 以内),但是并发量很⾼。 为了要⽀持⾼并发场景,⼀般是服务提供者就⼏...
dubbo-hessian协议http请求demo
可视化dubbo测试工具,自定义配置,模拟发送dubbo请求报文...
案例代码为springcloud-libaba整合dubbo同时也整合了openfeign,消费方可以通过两种方式调用服务提供方的接口,代码下载后简单修改下数据库链接可以直接运行起来,如果运行时有任何问题可以私信我;
provider里只有dubbo协议就是dubbo,包含rest协议,同时service接口直接可以浏览器等rest访问就是dubbox,不再需要controller写requestmapping路径转发,详见事例:https://git.oschina.net/feiyangziyun/dubbox ...
dubbo资源 dubbo-admin dubbo demo
-- name: 协议名称 dubbo|rmi|hessian|http| host:本机IP可不填,则系统自动获取 port:端口、填-1表示系统
-- name: 协议名称 dubbo|rmi|hessian|http| host:本机IP可不填,则系统自动获取 port:端口、填-1表示系统
软件描述:Dubbo的Jmeter平台插件,用来拓展Jmeter功能,使之支持Dubbo协议接口。使用前,需将下载的jar包放在Jmeter的lib/ext目录下,完成后打开Jmeter在取样器中看到Dubbo Sample,即为生效。
dubbo示例代码dubbo-sample
极简模式:通过dubbo提供的telnet协议收发数据。 普通模式:通过封装netty客户端收发数据。 用例模式:通过缓存数据,方便下一次操作,依赖普通模式。 增加依赖:通过调用maven命令,下载jar包和热加载到系统,主要...
incubator-dubbo-dubbo-2.6.1
使用注解DubboRefence可以标注接口类为调用dubbo api的接口,同时 @DubboReference 的注解可以像Dubbo的Refence一样指定接口的调用参数,@DubboReference 注解标注的接口类会执行Http协议转Dubbo协议,之后的接口...
本套视频从分布式系统的基本概念出发,由浅入深,讲解了RPC原理,Dubbo基本使用,Dubbo高可用场景以及Dubbo原理,涉及了分布式系统中服务注册、服务发现、负载均衡、灰度发布、集群容错、服务降级等核心概念的讲解及...