dubbo-2.6.4源码分析
2021-12-24 16:41:01 60 举报
dubbo2.6.4源码分析总结
作者其他创作
大纲/内容
ExporterMap
ServiceConfig
服务引用
是
是否是JDKD异常
根据url获取真实调用的目标类getExtension(name)
导出服务到远程
DubboNameSpaceHandler
向zookeeper中注册消费者
proxy
ReferenceBean实现了FactoryBean初始化时会调用其getObject方法
Exporter持有Invoker属性根据指定协议包装Invoker
向zookeeper中注册服务
Invoker
否
ProxyFactory
获取真实目标类后调用其extension.export()
异常是否和服务接口在同一个包下
异常是否在方法上有签名
DubboNamespaceHandlerdubbo扩展了Spring的schema文件档容器启动的时候调用DubboNamespaceHandler的init()方法注册各种解析器,包括ServiceBean(每个服务提供者都是一个ServiceBean)、ReferenceBean等
直接抛出原始异常
//先获取ExtensionLoader实例,然后加载自适应的Protocol扩展点Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();//发布服务protocol.export(Invoker<T> invoker);
ServiceConfig调用其export方法导出服务
获取自适应类 getAdaptiveExtensionClass()
Protocol.export(invoker)
ReferenceBean
包装成RuntimeException抛出
服务导出
ReferenceConfig调用createProxy()方法创建代理对象
依赖注入injectExtension()
Dubbo异常问题
dubboSPI机制
导出服务到本地(InjvmProtocol)
导出服务到远程(RegistryProtocol)
ServiceConfig调用其doExportUrlsFor1Protocol方法生成url并导出到本地和各个注册中心
ReferenceConfig调用init()方法
获取自适应类getAdaptiveExtension()
RegistryProtocol调用doRefer()方法在zk的consumer下注册url并且监控providers、configurators、routers节点,最后创建Invoker
没有缓存就创建一个自适应类createAdaptiveExtension()
除去AdaptiveExtensionFactory和AdaptiveCompiler可以直接加载其他的则需动态生成
Wapper动态生成的一个类,里面的方法invokeMethod()包装了目标类和方法的执行
远程引用(RegistryProtocol)
本地引用(InjvmInvoker)
导出服务到本地
调用protocol.export会激活自适应策略
RegistryProtocol调用refer()方法创建Invoker
JavassistProxyFactory根据获取的Invoker调用getProxy()方法创建调用代理类
ServiceConfig调用其doExportUrls根据各种协议导出(dubbo一个服务可以配置多个协议)
ReferenceConfig
是否是checked异常
Exporter
Invoker类里面的方法doInvoke()里面调用了Wapper类里面的invokeMethod(方法)
创建一个ExtensionLoader实例getExtensionLoader()
ServiceConfig调用其doExport方法初始化各种参数,包括Provider、Application等
动态生成自适应类createAdaptiveExtensionClass()
加载所有扩展类 getExtensionClasses()
是否是Dubbo的异常
ServiceBean
0 条评论
下一页