• Dubbo——通信框架与通信协议(dubbo协议)原理


    摘要

    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、心跳和事件的信息,请求时也会携带当前报文体内序列化协议编号。除此之外,报文头部还携带了请求状态,以及请求唯一标识和报文体长度。

    博文参考

  • 相关阅读:
    判断二叉树是否是平衡二叉树(c#)
    整体二分笔记
    pycharm中做web应用(9)连接mysql数据库
    Git实操图文详解系列教程(4)——IDEA集成GitHub
    AcWing 286. 选课,《算法竞赛进阶指南》
    Jetson简介、编程开发与环境搭建
    国内顶尖架构师手撸Vue+SpringBoot神级项目实战手册,GitHub限时开源
    docker-compose 搭建 Prometheus+Grafana监控系统
    【Java】IO流 - 字节流
    JavaScript(1)每天10个小知识点
  • 原文地址:https://blog.csdn.net/qq_46416934/article/details/126327903