如下图:
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()这个方法去验证下我们的想法~ 如图:
服务暴露时序图
免责声明:本站发布的内容(图片、视频和文字)以原创、来自互联网转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:ts@56dr.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
Copyright © 2009-2021 56dr.com. All Rights Reserved. 特网科技 版权所有 珠海市特网科技有限公司 粤ICP备16109289号
域名注册服务机构:阿里云计算有限公司(万网) 域名服务机构:烟台帝思普网络科技有限公司(DNSPod) CDN服务:阿里云计算有限公司 中国互联网举报中心 增值电信业务经营许可证B2