dubbo RPC框架,支持 SpringBoot集成。
基本工作流程
1.Provider
provider服务的提供者,需要实现具体的接口,并将服务暴露出去,将相关服务信息如 ip地址、服务名等信息注册到注册中心。
provider bootstrap 启动后会在注册中心看到服务相关的配置。这里的配置包括两种服务配置、配置管理。
provider 代码示例
2.Consumer
consumer 会在注册中心订阅服务的相关信息,这样就能获取provider 暴露的服务的服务名、ip 地址、接口名、方法名、方法参数、等信息,通过这些信息构建代理对象,调用本地方法时执行远程调用。
Consumer 代码示例
URL 配置总线
URL格式:
dubbo中以 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
- 以 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会由自动重试机制重新发起请求。
FailbackRegistry在AbstractRegistry 的基础上提供了重试功能,在 register、unRegister、subscribe、unsubscribe等核心方法时,添加重试定时任务,实现重试机制,同时添加了相应的定时任务清理逻辑。
定时任务会添加到多层时间轮,通过多层时间轮来推进任务。
序列化
dubbo 单独将序列抽象成一个模块dubbo-serialization,使用dubbo SPI 机制来序列化的扩展,默认的序列化协议是 hessian2。
dubbo3 版本后自带的序列化协议只有 hessian2、fastjson2,如果要使用其他的序列协议需要引入对应的 dubbo 的扩展支持包。
Remoting
dubbo-remoting模块负责网络通信和数据传输。
主要的核心功能如下:
- 网络通信的抽象层:提供统一的网络通信接口,屏蔽各种通讯协议传输的细节
- 支持多种通讯协议:根据需求不同可选择不同的通讯协议
- 连接管理
- 编解码支持
buff 缓冲池
定义了缓冲池的接口、抽象类以及实现类。
缓冲池在 NIO 框架中是一个不可获取的角色
在各个 NIO 框架中都有自己的缓冲池实现。