当前位置: 首页 > news >正文

【034】Dubbo3从0到1系列之dubbo-remoting模块

文章目录

  • 一、概述
    • 1.1 dubbo-remoting模块在哪里?
    • 1.2 dubbo网络库
    • 1.3 各个子模块介绍
  • 二、dubbo-remoting模块
    • 2.1 dubbo-remoting-api
    • 2.2 dubbo-remoting-api功能详解

有前边的博客当中,怩对Dubbo注册中心相关实现做了详细的介绍, 下边开始介绍 dubbo-remoting模块

该模块提供了多种客户端和服务端通信的功能.

一、概述

1.1 dubbo-remoting模块在哪里?

在这里插入图片描述

在上图红框部分即为: remoting层,其中包含了:

  • Exchage
  • Transport
  • erialize

1.2 dubbo网络库

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

dubbo-remoting-netty4 子模块使用 Netty4 实现 Dubbo 的远程通信.

1.3 各个子模块介绍

  1. dubbo-remoting-api

    • 这是Dubbo远程通信层的核心API模块,定义了基础的接口和抽象。
    • 定义基本概念如 Channel、Client、RemotingServer、Codec 等
    • 提供交换层抽象如 Request、Response、ExchangeChannel、ExchangeClient、ExchangeServer
    • 包含缓冲区管理工具(ChannelBuffer 及相关类)
    • 定义协议检测和线路协议抽象(ProtocolDetector、WireProtocol)
    • 包含整个远程通信系统中使用的通用异常和常量
  2. dubbo-remoting-netty 和 dubbo-remoting-netty4

    • 这两个模块基于不同版本的Netty提供了远程传输层的实现:
    • dubbo-remoting-netty:基于较旧的 Netty 3.x 版本
    • dubbo-remoting-netty4:基于更现代且性能更好的 Netty 4.x 版本
    • 都实现了 Client、RemotingServer、Channel 等核心接口
    • 包含特定于Netty的编解码器和消息处理器
    • 通过Netty的事件循环模型提供连接管理和事件处理
  3. dubbo-remoting-http12

    • 此模块为Dubbo服务提供HTTP/1.x和HTTP/2协议支持:
    • 支持HTTP/1.1和HTTP/2协议
    • 实现基于HTTP的请求/响应处理机制
    • 包含各种HTTP相关组件如头部、Cookie、方法、状态码等
    • 提供HTTP传输的消息序列化/反序列化能力
    • 基于Netty实现HTTP处理
  4. dubbo-remoting-http3

    • 此模块添加了HTTP/3协议支持:
    • 基于QUIC协议构建,以提高性能
    • 使用Netty的HTTP/3实现
    • 提供HTTP/3的传输监听器和SSL上下文配置
    • 相比HTTP/2具有更低延迟和更好的连接效率
  5. dubbo-remoting-websocket

    • 为Dubbo添加WebSocket协议支持:
    • 构建在http12模块之上
    • 提供实时双向通信能力
    • 实现WebSocket帧编解码和升级机制
    • 允许通过持久连接进行数据流传输
  6. dubbo-remoting-zookeeper-curator5

    • 提供与Apache ZooKeeper集成的服务发现和协调功能:
    • 使用Apache Curator 5.x作为ZooKeeper客户端库
    • 实现与ZooKeeper集群的连接管理
    • 提供子节点和数据变化的监听机制
    • 处理ZooKeeper会话状态管理和事件通知

二、dubbo-remoting模块

2.1 dubbo-remoting-api

这里需要注意的是, 在dubbo中的dubbo-remoting-api模块是其它dubbo-remoting-*模块的【抽象】, 其它dubbo-remotiong子模块都是依赖第三方nio库,实现dubbo-remoting-api模块的.
在这里插入图片描述

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

在这里插入图片描述

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

2.2 dubbo-remoting-api功能详解

✅ 1. Buffer 包 (org.apache.dubbo.remoting.buffer)

Buffer 包提供跨不同网络框架的字节缓冲区操作抽象:

  • ChannelBuffer: 主要接口,类似于 Netty 的 ByteBuf,用于字节缓冲区操作
  • AbstractChannelBuffer: 抽象基类,提供常见功能实现
  • HeapChannelBuffer 和 ByteBufferBackedChannelBuffer: 分别针对堆内存和直接内存的具体实现
  • 工厂类如 ChannelBufferFactory, HeapChannelBufferFactory, DirectChannelBufferFactory 用于创建适当的缓冲区实例
  • 流包装器如 ChannelBufferInputStream 和 ChannelBufferOutputStream 用于与 Java I/O API 集成

这个包使得 Dubbo 能够在不依赖特定网络框架的情况下工作。

✅ 2. Exchange 包 (org.apache.dubbo.remoting.exchange)

Exchange 包处理高级的请求-响应通信模式:
核心组件:

  • Request 和 Response: 表示带有唯一 ID 用于关联的 RPC 请求和响应
  • ExchangeChannel, ExchangeClient, ExchangeServer: 在基础 channel/client/server 基础上扩展了请求-响应语义
  • ExchangeHandler: 处理 exchange 层事件和消息的接口
  • Exchanger: 用于交换实现的 SPI 扩展点

关键特性:

  • 通过 CompletableFuture 支持异步通信
  • 心跳机制通过 HeartBeatRequest 和 HeartBeatResponse 实现
  • 默认实现 HeaderExchangeChannel 管理请求-响应关联
  • DefaultFuture 跟踪待处理请求并处理超时

支持子包:

  • codec: 处理请求和响应的序列化/反序列化
  • support: 提供实用类和基础实现

✅ 3. Transport 包 (org.apache.dubbo.remoting.transport)

Transport 包包含基础传输层抽象:
核心接口:

  • Channel: 表示两个端点之间的通信通道
  • Client 和 RemotingServer: 客户端和服务器端点抽象
  • ChannelHandler: 处理通道生命周期事件和消息处理
  • Codec 和 Codec2: 定义消息如何编码/解码以进行传输
  • Transporter: 创建传输实现的 SPI
  • Dispatcher: 决定事件如何分发到线程池

抽象实现:

  • AbstractChannel, AbstractClient, AbstractServer: 减少实现复杂性的基类
  • AbstractEndpoint: 端点的通用功能
  • 各种 dispatcher 实现用于不同的线程模型

✅ 4. 重要接口

核心通信接口:

Channel:

  • 表示单个通信通道
  • 提供发送消息、获取远程地址、检查连接状态的方法
  • 支持添加属性的扩展点

Client:

  • 继承 Channel 和 Resetable 接口
  • 添加重连功能
  • 管理连接生命周期

RemotingServer:

  • 管理多个通道
  • 提供服务器端功能如绑定端口
  • 支持重置配置参数

编解码接口
Codec 和 Codec2:

  • 定义对象如何序列化以进行传输
  • Codec2 是更新版本,设计更好
  • 由传输实现用于编码/解码消息

处理器接口
ChannelHandler:

  • 生命周期回调:connected, disconnected, sent, received, caught
  • 由高层组件实现以处理消息
  • 形成 Dubbo 事件驱动架构的基础

扩展点

  • Transporter: 创建客户端/服务器实现
  • Exchanger: 创建交换层客户端/服务器
  • Dispatcher: 决定事件处理的线程模型

所有这些都遵循 Dubbo 的 SPI (Service Provider Interface) 模式以实现可扩展性
这些核心组件协同工作,提供了一个灵活、可扩展的远程通信框架,可以支持各种协议和传输机制,同时保持一致的 API。

http://www.dtcms.com/a/609227.html

相关文章:

  • 【数据结构】并查集(操作详解 + 模板 + 练习)
  • JS Map 函数的二度回炉
  • 网站建设类公司排名wordpress3.5.2
  • uniapp写H5授权登录及分享,返回到目标页面
  • 奥卡姆剃刀原理:机器学习中的简约哲学与实践指南
  • ASC学习笔记0007:用于与GameplayAbilities系统交互的核心ActorComponent
  • 福永附近做网站公司广州公共资源交易中心交易平台
  • 深入理解 Swift TaskGroup:从基础用法到性能优化的完整指南
  • csharp通过对象和模板字符串解析模板
  • MYSQL结构操作DDL指令1.数据库操作
  • 为什么会有免费制作网站wordpress建站腾讯云
  • 仓颉迁移实战:将 Node.js 微服务移植到 Cangjie 的工程化评测
  • Redis(六)——哨兵
  • 网站错敏词整改报告,如何整改后如何定期自查自检
  • 网站验收时项目建设总结报告网站建设与维护本科教材
  • 【Java】使用国密2,3,4.仿照https 统一请求响应加解密
  • 华为对象存储:nginx代理临时访问地址后访问报错:Authentication Failed
  • 【2025-11-13】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
  • 【玩转多核异构】T153核心板RISC-V核的实时性应用解析
  • 单周期Risc-V指令拆分与datapath绘制
  • Java+EasyExcel 打造学习平台视频学习时长统计系统
  • 【PHP】使用buildsql构造子查询
  • 防火墙主要有哪些类型?如何保护网络安全?
  • 在线商城网站制作如东住房和城乡建设局网站
  • Java 与 PHP 开发核心良好习惯笔记(含通用+语言特有)
  • AI 电影制作迈入新阶段:谷歌云Veo 3.1模型发布,实现音频全覆盖与精细化创意剪辑
  • C++函数式策略模式中配置修改
  • [MCP][]快速入门MCP开发
  • 为食堂写个网站建设免费毕业设计的网站建设
  • 云原生数据平台(cloudeon)--核心服务组件扩展