Dubbo源码分析
2020-06-28 10:06:55 1 举报
dubbo源码详细分析
作者其他创作
大纲/内容
doSelect
cachedAdaptiveClass缓存,是否存在自定义AdaptiveClass
invoke
获得自适应扩展点
invokers
Protocol选择一种协议组织请求
5.调用Invoker
负载均衡
Registry拉取服务列表
类结构图com.alibaba.dubbo.common.extension factory AdaptiveExtensionFactory - 自适应扩展点工厂 SpiExtensionFactory - SPI扩展点工厂 Activate - 自动激活加载扩展点(注解) Adaptive - 自适应扩展点(注解) ExtensionFactory - 扩展点对象创建工厂 SPI - 定义一个扩展点(注解)
Dubbo原理图
createAdaptiveExtensionClass
LoadBalance
IHello
openServer
接着Consumer就知道服务A部署在3台机器上,以及每台机器的IP及端口号
RegistryProtocol
注册服务信息
Directory
ReferenceConfig
在注册中心,服务A部署了3台机器192.168.9.1:5650192.168.9.2:5650192.168.9.3:5650
反序列化
getProxy
RandomLoadBalance
FailoverClusterInvoker
select
NettyClient
Route路由策略
AbstractDirectory
doInvoke
doList
是
createAdaptiveExtensionClassCode
Wrapper.makeWrapper
proxyfactory.getInvoker
getObject
list
ProtocolListenerWrapper
Filter/Listener
DubboInvoker
join
问问注册中心服务A有没有?部署在哪台机器上?
注册中心
Consumer
4.调用select
DubbBeanDefinitionParser
send
result
Proxy动态代理对象
监听
ServiceBean
List list()
序列化
ProtocolFilterWrapper
createServer
ExtensionLoader.getExtensionLoader.getAdaptiveExtension
服务发现
createProxy创建一个代理对象
MockClusterInvoker
ExchangeClient
port
2.调用List
Protocol
服务提供者ip:portip:port
Protocol选择一种协议解析请求
服务消费者
doExportUrlsFor1Protocol
afterProperties
export
ServiceConfig
bind
loadFile
ProxyFactory
RegistryDirectory
把远端服务转换为Invoker
Invoker
Exchange请求封装为Request
动态感知服务机器列表
getExtensionLoader
sayHello
provider(服务A)N个接口自定义配置
get
解析配置文件
初始化ExtensionLoader
否
Exchange解析Request
代理
消费端时序图
AbstractClusterInvoker
cachedAdaptiveClass
接口
StaticDirectory(静态的)
getInvoker
DubboProtocol$Adaptive
refer
Protocol$Adaptive
远程调用
Node
Cluster
Request
HeaderExchangeServer
getAdaptiveExtension
二、服务发布流程
ProxyFactory$Adaptive
getAdaptiveExtensionClass
Servernetty/mina
ReferenceBean
resutl
MockInvokerSelector
把Invoker转换为客户端需要的接口
返回
JavassistProxyFactory
afterPropertiesSet
createAdaptiveExtension
AbstractInvoker
DubboProtocol
ref
服务注册
结束
RegistryDirectory(动态的)
doRefer
延时暴露
doLocalExport
1.生成
HeaderExchangeClient
doExport
Netty/Mina网络通信框架
doExportUrls
Directory获取注册信息
服务A的代理监听网络请求
InvokerInvocationHandler
Client
Protocol$Adapter
Router
动态创建一个适配器扩展点(创建一个动态的字节码文件),生成一个Protocol$Adpative
LoadBalance选择一台机器负载均衡
服务提供者
getExtensionClass
injectExtension(依赖注入)
Proxy0&InvokerInvocationHandler
loadExtensionClasses
AbstractLoadBalance
3.调用Router
服务注册中心ip:portip:port
refprotocol.refer
HeaderExchanger
0 条评论
下一页