有前边的博客当中,怩对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。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐