通过注解方式(service)进行暴漏服务
1. AnnotationBean通过调用postProcessAfterInitialization方法,得到(service)注解上的内容,创建一个ServiceBean。
2. 为ServiceBean 注入application,module,registries,provider,monitor,protocol等,初始化信息,在此过程中,有一个bug(2.5.3).。。。
接着调用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做远程暴漏
进行服务暴露,调用RegisrtyProtocol中的export方法。
doLocalExport中主要开启netty监听服务
默认使用HeaderExchanger
开启netty服务端,就可以接受来自客户端的连接了。
接下来就是获取注册中心,向注册中心注册数据,
向zookeeper中 写入一个动态的url
最后把返回的export加入到exports集合中,
基本上服务的暴漏就已经完成了。