Dubbo-service--服务启动

通过注解方式(service)进行暴漏服务

1. AnnotationBean通过调用postProcessAfterInitialization方法,得到(service)注解上的内容,创建一个ServiceBean。

Dubbo-service--服务启动_第1张图片

2. 为ServiceBean 注入application,module,registries,provider,monitor,protocol等,初始化信息,在此过程中,有一个bug(2.5.3).。。。

Dubbo-service--服务启动_第2张图片

接着调用ServieConfig的 export()方法。

3. 在ServiceConfig调用doExport()方法,进行暴漏url前的一系列检查(application,registries,protocol,interfaceandmethod,ref,interfacename....),注意mock有四种类型的参数(true,false,default,force),然后调用doExportUrls()方法。在此过程中有一个bug

判断字符串需要使用equals

4. 进入AbstractInterfaceConfig中的doExportUrls方法,将注册的协议转化成url

registry://192.168.243.128:2181/com.alibaba.dubbo.registry.RegistryService?application=provider&application.version=2.5.3&backup=192.168.243.128:2182,192.168.243.128:2183&dubbo=2.5.3&environment=test&owner=nlx&pid=8156®istry=zookeeper&timeout=3000×tamp=1534343327353

5. 调用ServiceConfig的doExportUrlsFor1Protocol方法,将所有的配置转化成map,将之前map中的数据组装成url,调用url中buildString方法

dubbo://192.168.243.1:20882/org.spring.springboot.dubbo.CityDubboService?actives=1&anyhost=true&application=provider&application.version=2.5.3&cache=lru&document=This+is+dubbo+service&dubbo=2.5.3&dynamic=true&environment=test&executes=1&interface=org.spring.springboot.dubbo.CityDubboService&layer=aaa&methods=getHello,findCityByName&mock=true&owner=nlx&pid=14928&retries=2&side=provider&timeout=3000×tamp=1534432451702

6. scope默认为null,默认是对url进行本地和远程暴露

配置若不是remote做本地暴漏

本地暴漏就是把protocol改为inJvm,host为127.0.0.1,port为0

配置若不是local做远程暴漏

Dubbo-service--服务启动_第3张图片

进行服务暴露,调用RegisrtyProtocol中的export方法。

Dubbo-service--服务启动_第4张图片

doLocalExport中主要开启netty监听服务

Dubbo-service--服务启动_第5张图片

默认使用HeaderExchanger

Dubbo-service--服务启动_第6张图片

开启netty服务端,就可以接受来自客户端的连接了。

接下来就是获取注册中心,向注册中心注册数据,

向zookeeper中 写入一个动态的url

最后把返回的export加入到exports集合中,

基本上服务的暴漏就已经完成了。

 

 

你可能感兴趣的:(Dubbo)