Lazy loaded image
dubbo
🗒️dubbo
Words 1456Read Time 4 min
2025-7-31
2025-9-5
type
status
date
slug
summary
tags
category
icon
password
原文
dubbo RPC框架,支持 SpringBoot集成。

基本工作流程

notion image

1.Provider

provider服务的提供者,需要实现具体的接口,并将服务暴露出去,将相关服务信息如 ip地址、服务名等信息注册到注册中心。
provider bootstrap 启动后会在注册中心看到服务相关的配置。这里的配置包括两种服务配置、配置管理。
provider 代码示例

2.Consumer

consumer 会在注册中心订阅服务的相关信息,这样就能获取provider 暴露的服务的服务名、ip 地址、接口名、方法名、方法参数、等信息,通过这些信息构建代理对象,调用本地方法时执行远程调用。
Consumer 代码示例

URL 配置总线

URL格式:
dubbo中以 URL作为参数,在方法内部解析传入的 URL 得到有用的参数。
  • URL 参与了扩展的实现的确定。
  • Provider 信息封装成 URL 注册到注册中心。
  • Consumer 通过 URL 确定了订阅了哪些 Provider
URL 入参所表单的含义比单个参数更丰富,在代码需要扩展的时候,将新的参数以 key/value 的形式追加到 URL 之中,而不需要改变入参或是返回值的结构。

URL构造的核心类

dubbo-common 包
org.apache.dubbo.common.URL org.apache.dubbo.common.URLBuilder 辅助构建 URL
org.apache.dubbo.common.URLStrParser 字符串解析成 URL 对象

服务注册

dubbo 支持 nacos、zookeeper 等注册中心。
服务注册中心以 dubbo SPI 方式来实现可插拔化。

核心类

dubbo-registry 注册中心的核心模块。 org.apache.dubbo.registry.RegistryFactory SPI 接口,支持适配器模式
org.apache.dubbo.registry.RegistryService 提供以 URL 的方式注册、取消注册、订阅、取消订阅、查询URL 的规范。
org.apache.dubbo.registry.support.AbstractRegistry 注册中心的基本功能实现。
AbstractRegistry
  • 会将URL 的信息缓存到本地。本地缓存会在注册中心不可用时,使用缓存来提供注册的服务信息。
    • 在用户的主目录路径下(user.home)会新建一个.dubbo文件目录,在该目录下新建.cache 文件来保存服务注册信息。Consumer、Provider 两方都会保存。
  • 以 KEY/VALUE 的形式保存了URL列表信息到内存中。
  • fail-safe 故障发生时不报错,而是通过降级、默认值等方式继续运行,有限保证系统可用性。

注册中心-nacos

dubbo-registry/dubbo-registry-nacos 模块NacosRegistry 类实现了以 URL 方式与nacos中心的交互操作,如注册服务,取消注册等。
Dubbo3 默认采用 “应用级服务发现 + 接口级服务发现” 的双注册模式,因此会发现应用级服务(应用名)和接口级服务(接口名)同时出现在 Nacos 控制台,可以通过配置 dubbo.registry.register-mode=instance/interface/all 来改变注册行为。
除了在会在nacos服务列表中注册,还会在nacos配置列表中出现。

重试机制

注册、取消注册、订阅、取消订阅这些行为若失败,dubbo会由自动重试机制重新发起请求。 FailbackRegistryAbstractRegistry 的基础上提供了重试功能,在 register、unRegister、subscribe、unsubscribe等核心方法时,添加重试定时任务,实现重试机制,同时添加了相应的定时任务清理逻辑。
定时任务会添加到多层时间轮,通过多层时间轮来推进任务。

序列化

dubbo 单独将序列抽象成一个模块dubbo-serialization,使用dubbo SPI 机制来序列化的扩展,默认的序列化协议是 hessian2。
dubbo3 版本后自带的序列化协议只有 hessian2、fastjson2,如果要使用其他的序列协议需要引入对应的 dubbo 的扩展支持包。
官方文档说明:Apache DubboApache Dubbo序列化

Remoting

dubbo-remoting模块负责网络通信和数据传输。
主要的核心功能如下:
  1. 网络通信的抽象层:提供统一的网络通信接口,屏蔽各种通讯协议传输的细节
  1. 支持多种通讯协议:根据需求不同可选择不同的通讯协议
  1. 连接管理
  1. 编解码支持
buff 缓冲池
定义了缓冲池的接口、抽象类以及实现类。
缓冲池在 NIO 框架中是一个不可获取的角色
在各个 NIO 框架中都有自己的缓冲池实现。
上一篇
SPI
下一篇
Redisson 分布式锁

Comments
Loading...