01.Dubbo
2019-12-31 09:45:19 0 举报
Dubbo 源码解析
作者其他创作
大纲/内容
注册中心
join()用于本地存根逻辑
此线表示 wrapper 不生效
ReferenceConfig
Protocol$Adaptive
②
后获取
1. 注册服务(远程注册、本地注册)订阅配置 configurators
RegistryProtocol
MockClusterInvoker
ServiceRouter
保存服务名与服务地址关系服务地址变动主动通知服务消费者
3. 推送订阅消息
createAdaptiveExtensionClass()如果所有实现类都没有 @Adaptive 注解,那么就会动态创建代理类
ClassLoaderFilter
getAdaptiveExtension()获取 ExtensionLoader 对应的动态代理实现
ContextFilter
provider
doExportUrls()循环所有 protocols依次进行服务暴露
服务路由过滤链
join()用于 mock 逻辑
injectExtension()自动注入,对 set 开头的方法进行自动注入
如果是 @Adaptive 注解,则赋值给 【cachedAdaptiveClass】如果是 wrapper 类,则存储在 【cachedWrapperClasses】set 集合中如果是普通 spi 扩展实现类,存储到 【cachedActivates】 map 集合中
ProtocolFilterWrapper
getExtension()获取 name 对应的 Extension 扩展实例
generate()为接口生成代理类
refer()动态代理实现
export()暴露远程服务
这里会解析出自动注入的参数类型,和 setXxx 的 xxx 属性名称
compile()编译后,用 classLoader 加载
MockInvokersSelector
Cluster$Adaptive
服务消费者
DubboProtocol
FailoverCluster
export()动态代理实现
TraceFilter
onApplicationEvent()监听容器刷新事件
FailoverClusterInvoker
refer()不生效
getAdaptiveExtensionClass()获取 ExtensionLoader 对应的动态代理类
ConsumerContextFilter
init()初始化 ref 对象
getProxy()创建代理对象
MonitorFilter
3. 建立长连接,进行数据通信接口名、方法名、参数类型列表、参数值
join()动态代理实现
ReferenceBean
export()创建 Netty Server暴露 dubbo 服务
即每个接口都会对应一个 ExtensionLoader,后面同理
ServiceBean
loadResource()循环解析 spi 文件中的每一行内容
loadExtensionClasses()解析 dubbo 的 spi 文件,主要从span style=\
StubProxyFactoryWrapper
EchoFilter
ServiceConfig
doExportUrlsFor1Protocol()
后判断
consumer
ProtocolListenerWrapper
FutureFilter
监控中心
AppRouter
doLocalExport()暴露远程服务
loadClass()循环解析 spi 文件中的每一行内容
先判断
join ()调用 join 创建 invoker
export()监听、暴露远程服务、注册节点
getExtensionClasses()初始化接口对应的所有 Extension
createProxy()创建代理对象
服务调用者过滤链
①
JavassistProxyFactory
先获取
export()如果不是 registry 协议就构建 filterChain
export()构建监听器
doRefer()1. 创建服务目录2. 创建路由链3. 监听节点
refer()调用 doRefer()
getObject()与 Spring 集成,span style=\
export()服务导出
TagRouter
exportLocal()暴露本地服务
createAdaptiveExtension()创建 ExtensionLoader 对应的动态代理实现
MockClusterWrapper
GenericFilter
SpiExtensionFactory#getExtension()使用 dubbo 创建自动代理类
createExtension()创建 Extension 扩展实例
InjvmProtocol
服务提供者过滤链
这里会循环此接口对应的所有 wrapper 类,然后依次包装,wrapper 类也会自动注入
SpringExtensionFactory#getExtension()获取 name 对应的 Extension 扩展实例
DubboInvoker
AbstractClusterInvoker
统计服务调用次数和调用时间
join()用于 failover 逻辑
服务提供者
getExtension()这里是调用 AdaptiveExtensionFactory #getExtension() 方法
TimeoutFilter
主要是解析这三个目录:META-INF/dubbo/internal/META-INF/dubbo/META-INF/services/
export()暴露本地服务
ExceptionFilter
getExtensionLoader()获取接口对应的 ExtensionLoader
0 条评论
下一页