Dubbo源码
2021-12-15 14:12:57 2 举报
Dubbo源码
作者其他创作
大纲/内容
最后server中包含的handler
finishBeanFactoryInitialization()
消费端过滤
new AnnotationConfigApplicationContext(ConsumerConfiguration.class);
创建Invoker
初始化
负载均衡
得到一个代理对象
AppRouter
registerBeanDefinitions()
DubboConfigBindingBeanPostProcessor
doExport()
扫描包进行Bean注册
ProtocolConfig对象
loadRegistries(false)
导出服务
directory.subscribe()
ConsumerConfig对象
RegistryConfig对象
registerReferenceAnnotationBeanPostProcessor(registry)
构造一个Exporter并缓存起来(访问起来更快)
NettyClient
getOrCreateProxy()
ServiceBean#onApplicationEvent()
消费端过滤器
从url的端口接收到请求后requestHandler来进行处理
RegistryDirector
BeanRegistrar.registerInfrastructureBean();
Spring启动执行bean工厂的后置处理
StaticDirectory
调用ZookeeperRegistry的register方法
扫描Dubbo自定义的@Service注解并注册为bean定义
查找被@Service注解的类的BeanDefinition
执行方法
注入后置处理器ReferenceAnnotationBeanPostProcessor
通过SPI调用RegistryProtocol把简化后的服务提供者url注册到registryUrl中去
ServiceBean对象
根据@Service注解上的属性对这些对象做对应的获取
rootBeanDefinition(ServiceAnnotationBeanPostProcessor.class)
scanner.scan(packageToScan);
注册@Service的bean工厂后置处理
ProviderConfig对象
ExchangeClient
postProcessPropertyValues()
扫描到BeanDefinition开始处理它
DemoService
请求
启动Netty
代理对象不存在Spring容器当中
registerReferenceBean()
ReferenceAnnotationBeanPostProcessor
通过包装类调用指定的Cluster实现类
JavassistProxyFactory
RouterChain
处理@Service生成bean
若不存在则创建Server并进行缓存
Dubbo中的url代表的是一种资源:例如: zookeeper://port:ip/org.apache.dubbo.demo.DemoService?timeout=xxx
服务容错
ReferenceBean对象
后置处理器用于以后调用
@Import(DubboComponentScanRegistrar.class)
getPackagesToScan(importingClassMetadata)
执行上一步创建的工厂后置处理拓展点
执行inject方法
组装完map信息之后创建URL
在bean的赋值阶段调用bean的后置处理
MockClusterInvoker#invoke
NettyServerHandler#channelRead
每个注册中心生成一个Invoker
对指定目录进行监听
DefaultFutrue.received()
调用包装类
创建一个服务提供者包括了Invoker和服务的配置
进入服务端过滤链
AllChannelHandler.receivce()
MultMessageHandler.receivce()
解析@import
DemoServiceImpl代理对象
消费者开始进行调用
invoker对象内的值
执行mock逻辑
选择一个注册中心
export()
创建后置处理器并且通过后置处理器给@Reference的对象创建bean
@Import(DubboConfigBindingsRegistrar.class)
使用特定的协议来对服务进行导出这里的协议为RegistryProtocol导出成功后得到一个Exporter
开启NettyServer
异步转同步
导出url
registerBeanPostProcessors()
AsyncToSyncInvoker#invoke
拿到多个@EnableDubboConfigBinding
protocol.export(wrapperInvoker)
DubboProtocol#export
ReferenceConfig#init()
ProtocolFilterWrapper#invoke
service.sayHello(\"world\")
CallbackRegistationInvoker
多个注册中心引入服务时
把referenceBean添加到Spring容器中去
注册@Reference的bean工厂后置处理器
通过SPI调用DubboProtocol开启NettyServer
doExportUrls()
服务路由
InvokerInvocationHandler#invoke
invokeBeanFactoryPostProcessors()
通过上面的过程创建一个动态代理并返回会调用getObject()方法创建
响应
拿到invoker创建代理
监听的是路径的内容不是节点的内容
注入DubboConfigConfigurationRegistrar类
处理@Reference生成bean
registry.subscribe()
createProxy(map)
生成一个ServiceBean并赋值
构造路由链路由链会在引入服务时按路由条件进行过滤
TagRouter
ReferenceAnnotationBeanPostProcessor#getOrCreateProxy()
DubboInvoker#invoke
执行业务逻辑
扫描包路径
按优先级加载配置:SystemConfiguration -> AbstractConfig -> AppExternalConfiguration -> ExternalConfiguration -> PropertiesConfiguration
HeartbeatHandler.receivce()
finishRefresh()
RegistryDirector$InvokerDelegate
ApplicationConfig对象
注册一个空的BeanDefinition
ConsumerContextFilter#invoke
new RegistryAwareClusterInvoker<T>(directory)
createServer(URL url)
ConfigCenterConfig对象
@Import(DubboConfigConfigurationRegistrar.class)
设置RpcContext参数
DecodeHandler.receivce()
Socket连接
FutrueFilter#invoke
加载注册中心地址
RandomLoadBalance
DemoServiceImpl对象
openServer(url)
bean赋值时执行的后置处理方法
拿到properties文件前缀
attributes.getAnnotationArray(\"value\")
执行Invoker链
CallbackRegistationInvoker#invoke
ServiceRouter
PROXY_FACTORY.getProxy(invoker)
RegistryAwareClusterInvoker#invoke
PROXY_FACTORY.getInvoker()
创建一个动态代理并返回会调用getObject()方法创建
directory.buildRouterChain(subscribeUrl)
HeaderExchangeHandler.receivce()
执行监听器
每种协议导出一个单独的服务注册到各个注册中心
注入DubboComponentScanRegistrar类
进行对服务端交互
加载并创建Bean
MonitorFilter#invoke
服务导出服务注册
对handler包装了两层,表示当处理一个请求时,每层Handler负责不同的处理逻辑为什么在connect和bind时都是DecodeHandler,解码,解的是把InputStream解析成RpcInvocation对象
寻找需要注入的属性(被@Reference标注的Field)
FailoverClusterInvoker#invoke
ServiceAnnotationBeanPostProcessor
RegistryProtocol#export
ExchangeHandlerAdapter.reply()
生成bean
checkAndUpdateSubConfigs()
默认实现类
注册一个DubboConfigBindingBeanPostProcessor的Bean后置处理器
一个具体的服务执行者
0 条评论
下一页