如下图:
doExportUrlsFor1Protocol(…)这个函数可以理解为通过具体协议进行服务暴露。
(4)最终调用的是InjvmProtocol的export(), 然后构建了一个InjvmExporter对象作为本地暴露对象,然后将构建的对象存入AbstractProtocol的exporterMap中,与此同时,构建的InjvmExporter中也持有一份exporterMap的引用。
我们知道服务暴露的核心组件是ServiceBean,我们也知道ServiceBean是在基于spring可扩展的XMLschema实例化来的,也就是说在spring容器启动的过程当中就完成了服务的暴露,接下来我们着重分析这个类就可以了。
很明显,如果我们不配置动态代理方式,那么缺省是javassist。
具体执行export的是ProtocolListenerWrapper,我们先看下执行的过程(接下来是一片连续代码截图~)
ServiceConfig#export(),这个方法首先会根据用户配置判断是否暴露,以及是否延迟暴露,不关注这块逻辑的话,最关键的部分是调用doExport()这个方法。如图:
我们可以猜想AbstractInterfaceConfig#loadRegistries()这个函数会将用户配置的协议转换为内部的URL对象(dubbo统一数据模型)加载到一个list当中。断点进入loadRegistries()这个方法去验证下我们的想法~ 如图:
服务暴露时序图
免责声明:本站发布的内容(图片、视频和文字)以原创、来自本网站内容采集于网络互联网转载等其它媒体和分享为主,内容观点不代表本网站立场,如侵犯了原作者的版权,请告知一经查实,将立刻删除涉嫌侵权内容,联系我们QQ:712375056,同时欢迎投稿传递力量。
Copyright © 2009-2022 56dr.com. All Rights Reserved. 特网科技 特网云 版权所有 特网科技 粤ICP备16109289号
域名注册服务机构:阿里云计算有限公司(万网) 域名服务机构:烟台帝思普网络科技有限公司(DNSPod) CDN服务:阿里云计算有限公司 百度云 中国互联网举报中心 增值电信业务经营许可证B2
建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站