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

    博文参考

  • 相关阅读:
    【操作系统】进程、线程和协程相关问题
    目录遍历漏洞
    keytool工具生成JKS证书
    leetcode Top100(17)矩阵置零
    正则表达式
    python常用标准库(压缩包模块zipfile和tarfile)
    React+Antd项目,Form的Input中已经有内容,但是还是提示此项为必填项,不能为空
    Day19 | 每天五道题
    【LangChain学习之旅】—(11) 记忆:通过Memory记住用户上次的对话细节
    TC358743XBG/TC358749XBG(\w Scaler):HDMI转MIPI CSI东芝转换芯片
  • 原文地址:https://blog.csdn.net/qq_46416934/article/details/126327903