经过解析配置文件,将xml定义的Bean解析并实例化,(涉及重要的类:ServiceBean、RegistryConfig[注册中心配置]、ProtocolConfig[协议配置]、ApplicationConfig[应用配置]),最终向注册中心注册服务提供方的过程。这里咱们重点分析provider是如何注册到注册中心的?注册了那些内容?html
一、准备工做作好:RegistryConfig、ProtocolConfig、ApplicationConfig类做为ServiceBean的属性存在,在export以前先检查这些属性有没有赋值,没有的话会使用默认的配置实例化并赋值java
二、doExportUrls:组装须要向注册中心注册的URL,根据配置的不一样协议(默认dubbo),向注册中心注册相应的地址app
private void doExportUrls() { List<URL> registryURLs = loadRegistries(true); for (ProtocolConfig protocolConfig : protocols) { doExportUrlsFor1Protocol(protocolConfig, registryURLs); } }
2.一、组装URL:loadRegistries(true)ide
registry://127.0.0.1:2181/com.alibaba.dubbo.registry.RegistryService?application=demo-provider&dubbo=2.0.0&owner=william&pid=5916®istry=zookeeper×tamp=1496647142958
组装完成后的URL就是上面那样。url
2.二、向注册中心注册:spa
Invoker<?> invoker = proxyFactory.getInvoker(ref, (Class) interfaceClass, registryURL.addParameterAndEncoded(Constants.EXPORT_KEY, url.toFullString()));
Exporter<?> exporter = protocol.export(invoker);
2.2.一、proxyFactory为javassist字节码生成的Adaptive实例,其getInvoker方法经过URL参数调用具体的扩展点(参见扩展点自适应),并调用扩展点的getInvoker方法。.net
2.2.二、protocol也是动态生成的Adaptive实例,由于Url中的protocol属性为Registry,因此具体的扩展点实现是RegistryProtocol,又由于Protocol实现了装饰器模式,code
ProtocolListenerWrapper,ProtocolFilterWrapper是装饰器模式的2个实现。因此export的调用过程以下:xml
ProtocolFilterWrapper.export()--》ProtocolListenerWrapper.export()--》RegistryProtocol.export()htm
wapper类只是方便咱们本身作些额外的处理,最终向注册中心注册的过程在RegistryProtocol中。
2.2.三、在2.2.2步骤中实例化RegistryProtocol后,会检查属性中是否有启用扩展点加载的,有则一并建立对应属性的Adaptive实例。
A、doLocalExport:建立ExchangeServer绑定回调,开启Netty链接,保持通讯。
B、register:向注册中心注册临时节点:(节点名)
/dubbo/com.alibaba.dubbo.demo.DemoService/providers/dubbo%3A%2F%2F192.168.3.6%3A20880%2Fcom.alibaba.dubbo.demo.DemoService%3Fanyhost%3Dtrue%26application%3Ddemo-provider%26dubbo%3D2.0.0%26generic%3Dfalse%26interface%3Dcom.alibaba.dubbo.demo.DemoService%26loadbalance%3Droundrobin%26methods%3DsayHello%26owner%3Dwilliam%26pid%3D6380%26side%3Dprovider%26timestamp%3D1497161144248
C、建立configurators节点,对该节点添加子节点监听,当该节点有变化从新暴露,至关于执行A
/dubbo/com.alibaba.dubbo.demo.DemoService/configurators 监听的节点
建立/dubbo/com.alibaba.dubbo.demo.DemoService/providers/(url)节点
建立/dubbo/com.alibaba.dubbo.demo.DemoService/configurators 节点,并对该节点添加监听
参考: