Soul源码总结-01-27

  • .跑通alibab-dubbo, apache-dubbo插件,研究底层原理
  • 总结

知识回顾

alibaba-dubbo插件主要处理alibaba-dubbo protocol的请求。将要注册到网关的dubbo服务用SoulDubboClient注解标注,在相关项目启动时会将索要注册的服务以及相关selector, rule同步到soul-admin.其实还是通过ApacheDubboPlugin调用doExecute来实现dubbo服务的调用。

Dubbo插件原理初探

与divide插件不同的是,dubbo插件需要metadata才能实现dubbo服务的调用,我们可以观察一下soul-admindashboard的元数据管理一栏
在这里插入图片描述
与此对应的是MetaDataPojo
在这里插入图片描述
rpcExt其实对应DubboRuleHandle的JSON字符串
在这里插入图片描述
可以看出在dubbo服务注册到soul网关时,每个dubbo接口对应相应的一条元数据信息。
通过打断点进行追踪,我们发现在AlibabaDubboPlugindoExecute方法中首先拿到soul-admin同步过来的META_DATA, 然后通过alibabaDubboProxyService来泛化调用注册的一个dubbo服务。核心代码如下:在这里插入图片描述
那么AlibabaDubboPlugin是如何拿到soul-admin端的metaData呢?我们可以关注AlibabaDubboMetaDataSubscriber中的onSubscribe方法,实现了onSubscribe监听者模式,并将META_DATA放入concurrentHashMap做缓存。
在这里插入图片描述
我们还可以深究ApplicationConfigCache,该类是一个单例,通过dubbo接口的META_DATA来生成相应的GenericService从而被dubbo代理泛化调用。核心代码为build方法,通过元数据生成GenericService的reference.
在这里插入图片描述
接下来是最为关键的一步,即在AlibabaDubboProxyService代理服务中实现泛化调用。
在这里插入图片描述
至此alibaba-dubbo插件的底层原理初探已经完成。apache-dubbo插件的底层原理和alibaba-dubbo相似:他们通过使用同一个dubboParamResolveService来解析dubbo参数从而生成不同的代理来泛化调用dubbo服务。

总结

alibaba-dubbo插件和apache-dubbo插件的调用过程已经初步探明,但是soul admin是如何同步元数据到soul网关这一步还尚未探明。需进一步进行研究。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页