Dubbo 源码分析 01 服务提供者provider初始化 和 注册

http://dubbo.apache.org/zh-cn/docs/user/preface/architecture.html  dubbo官方文档

Dubbo自定义标签实现。
dubbo通过Spring加载配置文件后,是如何触发注册中心、服务提供者、服务消费者按照Dubbo的设计执行相关的功能。
   所谓的执行相关功能如下:注册中心启动,监听消息提供者的注册服务、接收消息消费者的服务订阅(服务注册与发现机制)。
服务提供者向注册中心注册服务。
服务消费者向注册中心订阅服务。

上面通过dubbo提供的dubbo:application、dubbo:registry、dubbo:protocol、dubbo:provider、dubbo:service分别定义dubbo应用程序名、注册中心、协议、服务提供者参数默认值、服务提供者,这些配置后面的实现原理是什么呢?是如何启动并发挥相关作用的呢?
一、需要先解析dubbo标签,先看DubboNamespaceHandler,

DubboBeanDefinitionParser 和 AnnotationBeanDefinitionParser ,分别基于xml配置文件和注解annotation进行解析

dubbo标签和实例化后的类名,映射如下

Step1:解析id属性,如果DubboBeanDefinitionParser对象的required属性为true,如果id为空,则根据如下规则构建一个id。

如果name属性不为空,则取name的值,如果已存在,则为 name + 序号,例如 name,name1,name2。
如果name属性为空,如果是dubbo:protocol标签,则取protocol属性,其他的则取interface属性,如果不为空,则取该值,但如果已存在,和name处理相同,在后面追加序号。
如果第二步还未空,则取beanClass的名称,如果已存在,则追加序号。
   Step2:根据不同的标签解析特殊属性。

dubbo:protocol,添加protocol属性(BeanDefinition)。
dubbo:service,添加ref属性。
dubbo:provider,嵌套解析,dubbo:provider标签有两个可选的子标签,dubbo:service、dubbo:parameter,这里需要嵌套解析dubbo:service标签
知识点:dubbo:provider是配置服务提供者的默认参数,在dubbo spring配置文件中可以配置多个dubbo:provider,那dubbo:service标签如何选取一个合适的dubbo:provider作为其默认参数呢?有两种办法:
将dubbo:service标签直接声明在dubbo:provider方法
在dubbo:service中通过provider属性指定一个provider配置,如果不填,并且存在多个dubbo:provider配置,则会抛出错误。
dubbo:customer:解析嵌套标签,其原理与dubbo:provider解析一样。
   Step3:解析标签,将属性与值填充到BeanDefinition的propertyValues中。最终返回BeanDefinition实例,供Spring实例化Bean。
 上述已经解答了Dubbo自定义标签的解析实现,主要完成了ApplicationConfig、RegistryConfig、ServiceBean、ReferenceBean实例的初始化,那什么时候构建与注册中心的连接、服务提供者什么时候会向注册中心注册服务,服务消费者向注册中心订阅服务呢?

据我目前所掌握的知识,Spring在对象实例化,一般有两种方式来对Bean做一些定制化处理。

1. 实现BeanPostProcessor Spring后置处理器,在Bean初始化前后执行相关操作。

2. Bean实现InitializingBean接口(init-method)

ServiceBean(服务提供者)与ReferenceBean(服务消费者)比较特殊,实现了Spring与Bean生命周期相关的接口。

 摸到Dubbo服务注册与发现机制(Dubbo服务提供者、Dubbo服务消费者、注册中心的启动流程入口点了,下一步就是分析ServiceBean、ReferenceBean的实现原理,试图揭开Dubbo服务注册与发现机制


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值