摘要

Dubbo 并没有自己实现一套完整的网络库,而是使用现有的、相对成熟的第三方网络库,例如,Netty、Mina 或是 Grizzly 等 NIO 框架。我们可以根据自己的实际场景和需求修改配置,选择底层使用的 NIO 框架。

一、Dubbo通信框架原理

dubbo-remoting 模块的结构,其中每个子模块对应一个第三方 NIO 框架,例如,dubbo-remoting-netty4 子模块使用 Netty4 实现 Dubbo 的远程通信,dubbo-remoting-grizzly 子模块使用 Grizzly 实现 Dubbo 的远程通信。需要注意的是,Dubbo 的 dubbo-remoting-api 是其他 dubbo-remoting-* 模块的顶层抽象,其他 dubbo-remoting 子模块都是依赖第三方 NIO 库实现 dubbo-remoting-api 模块的,依赖关系如下图所示:

dubbo-remoting-api 中对整个 Remoting 层的抽象,dubbo-remoting-api 模块的结构如下图所示:

一般情况下,我们会将功能类似或是相关联的类放到一个包中,所以我们需要先来了解 dubbo-remoting-api 模块中各个包的功能。

  • buffer 包:定义了缓冲区相关的接口、抽象类以及实现类。缓冲区在NIO框架中是一个不可或缺的角色,在各个 NIO 框架中都有自己的缓冲区实现。这里的 buffer 包在更高的层面,抽象了各个 NIO 框架的缓冲区,同时也提供了一些基础实现。
  • exchange 包:抽象了 Request 和 Response 两个概念,并为其添加很多特性。这是整个远程调用非常核心的部分
  • transport 包:对网络传输层的抽象,但它只负责抽象单向消息的传输,即请求消息由 Client 端发出,Server 端接收;响应消息由 Server 端发出,Client端接收。有很多网络库可以实现网络传输的功能,例如 Netty、Grizzly 等, transport 包是在这些网络库上层的一层抽象。
  • 其他接口:Endpoint、Channel、Transporter、Dispatcher 等顶层接口放到了org.apache.dubbo.remoting 这个包,这些接口是 Dubbo Remoting 的核心接口。

二、Dubbo的通信协议原理

Dubbo 协议设计参考了现有TCP/IP协议,一次RPC 调用包括协议头和协议体两部分。16字节长的报文头部主要携带了魔法数(exdabb),以及当前请求报文是否是 Request、Response、心跳和事件的信息,请求时也会携带当前报文体内序列化协议编号。除此之外,报文头部还携带了请求状态,以及请求唯一标识和报文体长度。

博文参考

Dubbo——通信框架与通信协议(dubbo协议)原理相关推荐

  1. Dubbo RPC框架都支持哪些协议

    RPC框架分通信协议和序列化协议 Dubbo框架支持多种通信协议和序列化协议,可以通过配置文件进行修改 Dubbo支持的通信协议 dubbo协议(默认) rmi协议 hessian协议 http协议 ...

  2. java基础巩固-宇宙第一AiYWM:为了维持生计,手写RPC~Version07(RPC原理、序列化框架们、网络协议框架们 、RPC 能帮助我们做什么呢、RPC异常排查:ctrl+F搜超时)整起

    上次Version06说到了咱们手写迷你版RPC的大体流程, 对咱们的迷你版RPC的大体流程再做几点补充: 为什么要封装网络协议,别人说封装好咱们就要封装?Java有这个特性那咱就要用?好像是这样.看 ...

  3. RPC-非阻塞通信下的同步API实现原理,以Dubbo为例

    Netty在Java NIO领域基本算是独占鳌头,涉及到高性能网络通信,基本都会以Netty为底层通信框架,Dubbo 也不例外.以下将以Dubbo实现为例介绍其是如何在NIO非阻塞通信基础上实现同步 ...

  4. Dubbo注册协议原理以及源码阅读

    前言 继上次小编所讲RPC协议暴露服务并且远程调用之后,小编这次给大家带来注册中心协议整体流程原理以及源码精讲,Dubbo协议服务暴露与引用以及源码分析文章中,远程服务暴露可以只通过RPC协议即可,那 ...

  5. 【Dubbo】深入理解Apache Dubbo(一):带你走近高性能RPC通信框架

    1. 引言 从本篇开始,笔者将会带你进入Apache顶级项目--Dubbo的学习.本篇侧重介绍Dubbo的来龙去脉,会从架构的演进过程说明Dubbo的重要性和意义. 2. 应用架构的演进过程 2.1 ...

  6. Dubbo 通信协议 dubbo 协议为什么要消费者比提供者个数多

    dubbo 通信协议 dubbo 协议为什么要消费者比提供者个数多 因 dubbo 协议采用单一长连接,假设网络为千兆网卡(1024Mbit=128MByte), 根据测试经验数据每条连接最多只能压满 ...

  7. Dubbo 通信协议 dubbo 协议为什么不能传大包

    dubbo 通信协议 dubbo 协议为什么不能传大包 因 dubbo 协议采用单一长连接, 如果每次请求的数据包大小为 500KByte,假设网络为千兆网卡(1024Mbit=128MByte),每 ...

  8. dubbo provider异步_Dubbo支持什么协议?与SpringCould相比它为什么效率要高一些?

    推荐学习 消息中间件合集:MQ(ActiveMQ/RabbitMQ/RocketMQ)+Kafka+笔记 肝了30天,整出这份[分布式宝典:限流+缓存+通讯],秋招跳槽有望 一箭双雕!Alibaba架 ...

  9. 走进Dubbo——RPC框架简介

    前言 dubbo是阿里开源的分布式rpc框架,在许多中小企业的微服务化过程中发挥着核心作用.但是想把dubbo运行起来也不是那么简单的,这几天我想搭个dubbo环境玩玩,一路受阻. 相信前来了解rpc ...

最新文章

  1. iOS开发图片纯色填充(两种方式)和缩小图片
  2. [开发笔记]-未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出...
  3. 计算机事业单位专技岗考什么区别,事业单位管理和专技岗位有什么区别?哪个有前途?...
  4. Java自动装箱后的值比较
  5. 安卓Android Studio开发IDE的安装
  6. jwt java 项目实例_JWT(JsonWebToken)+SpringMVC项目demo
  7. 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·006【事务】
  8. 数据库与表的操作之创建表(CREATE TABLE)
  9. C++标准库分析总结(一)
  10. 可视化排班管理_人事工资管理系统就选i人事,提升算薪效率聚焦战略决策
  11. Java学习笔记之设计模式(2)工厂模式
  12. 安防综合管理平台/视频资源汇聚平台
  13. linux开机禁用vga设备,用vga_switcheroo在Linux下(开启KMS)彻底关闭某一可切换显卡的简单教程...
  14. 兰州大学本科毕业论文答辩PPT模板
  15. 9011,9012,9013,9014,8050,8550三极管的区别
  16. 做一个略调皮的个人博客--菜单篇
  17. python绘图之Times New Roman字体以及Helvetica字体
  18. python数字加密资产_GitHub - ezpod/crypto-exchange-engine: 数字加密资产交易引擎的原理性实现代码,汇智网提供...
  19. 聊天群组营销-把小米磨成粉,再做成团
  20. Spring MVC 地址请求映射

热门文章

  1. linux malloc 返回指针不可用,为啥malloc后得到的指针不可以free  ??? 谢谢  [已解决]...
  2. 集成运算放大电路与Multisim仿真学习笔记
  3. 万邦阿里巴巴中国站获得1688商品详情 API 返回值说明
  4. 使用Qt Designer和Qss设计Qt界面
  5. MP503空气质量气体传感器介绍
  6. 数据密集型应用系统设计_数据存储与检索
  7. 爬虫手册05 异步爬虫
  8. 快速查快递单号物流,跟踪物流详情
  9. 你知道物联网感知识别层有哪些技术吗?
  10. PictureSelector(强大的图片选择器)