一文讲明Dubbo Remoting模块(上)

简介: 一文讲明Dubbo Remoting模块

dubbo-remoting 模块提供了多种客户端和服务端通信功能。

  • 最底层部分即为 Remoting 层
  • image.png
  • 包括 Exchange、Transport和Serialize 三层。本文主要描述 Exchange 和 Transport 两层。

Dubbo 整体架构设计图

  • Dubbo直接集成已有的第三方网络库,如Netty、Mina、Grizzly 等 NIO 框架。
  • image.png
  • dubbo-remoting-zookeeper使用 Apache Curator 实现了与 Zookeeper 的交互。


dubbo-remoting-api 模块


是其他 dubbo-remoting-* 模块的顶层抽象,其他 dubbo-remoting 子模块都是依赖第三方 NIO 库实现 dubbo-remoting-api 模块。


buffer 包

image.png

定义了缓冲区相关的接口、抽象类以及实现类。在各个 NIO 框架中都有自己的缓冲区实现。但这里的 buffer 包在更高层面,抽象了各个 NIO 框架的缓冲区,同时也提供了一些基础实现。


exchange 包

抽象了 Request 和 Response,并为其添加很多特性。这是整个远程调用核心部分。


transport 包

抽象网络传输层,但只负责抽象单向消息传输,即请求消息由 Client 端发出,Server 端接收;响应消息由 Server 端发出,Client端接收。有很多网络库可以实现网络传输,如Netty, transport 包是在网络库上层的一层抽象。


传输层核心接口


“端点(Endpoint)”,可通过一个 ip 和 port 唯一确定一个端点,两端点间会创建 TCP 连接,双向传输数据。Dubbo 将 Endpoint 之间的 TCP 连接抽象为(Channel)通道,将发起请求的 Endpoint 抽象为Client,接收请求的 Endpoint 抽象为Server。


Endpoint 接口

image.png

etXXX() 用于获得 Endpoint 本身的一些属性,如Endpoint 的本地地址、关联的 URL 信息以及底层 Channel 关联的 ChannelHandler。


send() 负责数据发送


close() 及 startClose() 用于关闭底层 Channel


isClosed() 方法用于检测底层 Channel 是否已关闭



Channel

对 Endpoint 双方连接的抽象,就像传输管道。消息发送端往 Channel 写入消息,接收端从 Channel 读取消息。

  • 接口的定义
    继承 Endpoint 接口,也具备开关状态以及发送数据能力
    可在 Channel 上附加 KV 属性
  • image.png
  • ChannelHandler

注册在 Channel 上的消息处理器,接口的定义

image.png

@SPI 注解表明该接口是一个扩展点。

有一类特殊的 ChannelHandler 专门负责实现编解码功能,从而实现字节数据与有意义的消息之间的转换,或是消息之间的相互转换

image.png

该接口也是一个扩展接口,encode()、decode() 被 @Adaptive 注解修饰,也就会生成适配器类,其中会根据 URL 中的 codec 值确定具体的扩展实现类。


DecodeResult 这个枚举是在处理 TCP 传输时粘包和拆包使用的,例如,当前能读取到的数据不足以构成一个消息时,就会使用 NEED_MORE_INPUT 枚举。


目录
相关文章
|
6月前
|
负载均衡 监控 Dubbo
【Dubbo 解析】模块分包解析
【1月更文挑战第11天】【Dubbo 解析】模块分包解析
【Dubbo 解析】模块分包解析
|
6月前
|
监控 负载均衡 Dubbo
Dubbo 模块探秘:深入了解每个组件的独特功能【二】
Dubbo 模块探秘:深入了解每个组件的独特功能【二】
114 0
|
运维 监控 Dubbo
Dubbo3 源码解读-宋小生-16:模块发布器发布服务全过程
> 完整电子书下载地址: https://developer.aliyun.com/ebook/7894 > Dubbo3 已经全面取代 HSF2 成为阿里的下一代服务框架,2022 双十一基于 Dubbo3 首次实现了关键业务不停推、不降级的全面用户体验提升,从技术上,大幅提高研发与运维效率的同时地址推送等关键资源利用率提升超 40%,基于三位一体的开源中间件体系打造了阿里在云上的单元化最佳实
316 0
Dubbo3 源码解读-宋小生-16:模块发布器发布服务全过程
|
存储 运维 Dubbo
Dubbo3 源码解读-宋小生-3:框架,应用程序,模块领域模型Model对象的初始化
> Dubbo3 已经全面取代 HSF2 成为阿里的下一代服务框架,2022 双 11 基于 Dubbo3 首次实现了关键业务不停推、不降级的全面用户体验提升,从技术上,大幅提高研发与运维效率的同时地址推送等关键资源利用率提升超 40%,基于三位一体的开源中间件体系打造了阿里在云上的单元化最佳实践和统一标准,同时将规模化实践经验与技术创新贡献开源社区,极大的推动了开源技术与标准的发展。 > 本文
484 0
Dubbo3 源码解读-宋小生-3:框架,应用程序,模块领域模型Model对象的初始化
|
负载均衡 监控 Dubbo
Dubbo模块
cluster 集群容错、负载均衡 common 公共包 compatible 兼容,比如说包的改变、alibaba 变成 apache config 加载配置、提供统一的对外的配置 configcenter 配置中心、统一管理dubbo的配置 container 容器 filter 过滤 metadata 元数据 monitor 监控模块 plugin :auth、qos registry 注册中心 remoting 远程协议支持、netty、mina rpc rpc 通信协议的支持 serialization 序列化
120 0
|
存储 缓存 Dubbo
Java 200+ 面试题补充③ Dubbo 模块
Java 200+ 面试题补充③ Dubbo 模块
169 0
Java 200+ 面试题补充③ Dubbo 模块
|
编解码 Dubbo 应用服务中间件
一文讲明Dubbo Remoting模块(下)
一文讲明Dubbo Remoting模块(下)
90 0
一文讲明Dubbo Remoting模块(下)
|
6月前
|
Dubbo Java 应用服务中间件
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
|
1月前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
58 2
|
3月前
|
Dubbo Java 应用服务中间件
💥Spring Cloud Dubbo火爆来袭!微服务通信的终极利器,你知道它有多强大吗?🔥
【8月更文挑战第29天】随着信息技术的发展,微服务架构成为企业应用开发的主流模式,而高效的微服务通信至关重要。Spring Cloud Dubbo通过整合Dubbo与Spring Cloud的优势,提供高性能RPC通信及丰富的生态支持,包括服务注册与发现、负载均衡和容错机制等,简化了服务调用管理并支持多种通信协议,提升了系统的可伸缩性和稳定性,成为微服务通信领域的优选方案。开发者仅需关注业务逻辑,而无需过多关心底层通信细节,使得Spring Cloud Dubbo在未来微服务开发中将更加受到青睐。
86 0