dubbo-配置解析,服务导出
2021-09-06 10:06:03 4 举报
dubbo配置解析,服务导出
作者其他创作
大纲/内容
服务引入
发出ServiceBeanExportedEvent事件
实现了BeanDefinitionRegistryPostProcessor接口,所以在Spring启动时会调用postProcessBeanDefinitionRegistry方法
ExporterChangeableWrapper
ProtocolFilterWrapper.export
DecodeHandler
属性注入,寻找被@Reference注解的属性
requestHandler ExchangeHandlerAdapter.replay()从exportmap中根据服务可以获取导出的export,执行方法
bossgroup一个线程workgroup 线程个数:cpu核数+1,最大是32个线程心跳3分钟编解码器:NettyCodecAdapter
将当前服务提供者Invoker,以及该服务对应的注册中心地址,以及简化后的服务url存入ProviderConsumerRegTable
postProcessBeanDefinitionRegistry
protocol.export(wrapperInvoker)
@EnableDubboConfig
doGetInjectedBean
生成一个servicebean,ref属性指向传入原生bean的name,设置@Service注解上的配置
配置解析
exportLocal(url)本地导出
doExportUrls
this.urls.add(url)
获取代理对象,给属性赋值
生成代理对象
@Import(DubboConfigConfigurationRegistrar.class)
@Import(DubboConfigBindingsRegistrar.class)
注册了ReferenceAnnotationBeanPostProcessor
获取注册中心的实现,将服务注册到注册中心
@EnableDubboConfigBindings
解析生成serviceconfig配置
ListenerExporterWrapper
将invoker包装为DubboExporter并将服务的key和export放到exportmap中
逐个解析EnableDubboConfigBinding注解的属性
ChannelHandlerDispatcher
ProtocolListenerWrapper.export
inject
providerInvokers
为每一个配置生成一个空的bd跟b后置处理器
主动获取动态配置
扫描被@Service注解标注的类
当spring容器Refreshe完成发出ContextRefreshedEvent事件
监听订阅的服务和动态配置
远程导出
ExchangeServer createServer(url)
服务导出,引入主干流程
生成ProviderModel并将ProviderModel放入到PROVIDED_SERVICES
推送服务的元数据信息
@Import(DubboComponentScanRegistrar.class)
根据动态配置重写服务提供者url
DestroyableExporter
设置codec为dubboCountCodectimeout = 1000connecttimeout=3000idletimeout = 600000
ServiceBean.onApplicationEvent()
服务导出详细源码
openServer(url)
服务导出:首先注册一个beanfactorypostprocessor,在spring容器启动的时候扫描所有加了@Service注解的类,每个类生成一个spring bean对象跟serviceBean对象。serviceBean对象的通过spring容器启动完成之后发布的ContextRefreshedEvent事件,通知每个service进行导出。生成服务提供者的url,进行服务本地导出,通过动态代理生成服务接口的代理对象Invoker,invoker中包含了服务的实现类。订阅动态配置,获取动态配置,重写服务url。构造过滤器链(超时,异常,token过滤器),将invoker转化成dubboExport,开启netty,构建请求处理的handler,NettyServerHandler--MultiMessageHandler--HeartbeatHandler--AllChannelHandler--DecodeHandler--HeaderExchangeHandler--ExchangeHandlerAdapter(包含export)创建bossgroup跟workergroup,构建dubbo的编解码器跟心跳检测,默认是180s。将服务提供者url注册到注册中心。AllChannelHandler:创建一个线程池,默认采用fixedthreadpool,200个线程,SynchronousQueue,拒绝策略是打日志,抛异常。
PROXY_FACTORY.getInvoker()通过默认的javassit生成当前接口的代理对象invoker,invoker包含了服务的实现者,服务接口,服务的注册url,通过invoker的invoker方法,调用方法
ServiceBean:org.apache.dubbo.demo.DemoService
根据配置生成服务url
ProviderModel中保存了服务提供者访问路径,实现类,接口,以及接口中的各个方法对应的ProviderMethodModel
将servicebean注入spring容器中
@DubboComponentScan
doExport
exporters.add(exporter)
注入ServiceAnnotationBeanPostProcessor的bd
获取包扫描路径
DelegateProviderMetaDataInvoker包装invoker和配置
服务导出
postProcessPropertyValues
HeaderExchangeHandler(handler)
将原生的bd注入spring容器中demoServiceImpl
export
生成referenceBean对象,并注入到spring容器中
一个ip+端口,只创建一个server
根据配置生成注册url
收藏
收藏
0 条评论
下一页