dubbo服务暴露简述

dubbo服务暴露分为两部分
1 服务实例通过动态代理转化成Invoker
2 Invoker 通过具体的协议(dubbo,rest,injvm等) 转化成exporter
如下图所示

image.png

1 暴露的入口方法 ServiceConfig.doExportUrlsFor1Protocol


image.png

其中protocolConfig 是dubbo要暴露的服务的配置参数
registryURLs 是要配置到远程注册中心信息
2 根据scope参数判断是 本地还是远程暴露 执行不同的方法


image.png

3 代理工厂获取Invoker 及根据Protocol根据Invoker参数暴露服务
image.png

4 Protocol实例使用了责任链的设计模式 会依次调用下面各类的export方法


image.png

从而为服务的暴露增加了过滤器和监听器。下面看看如何实现的:
1 ServiceConfig 中 PROTOCOL获取实例


image.png

追踪getAdaptiveExtension 方法到 createAdaptiveExtensionClass
再到 AdaptiveCompiler.compile 方法


image.png

最后到 ExtensionLoader.createExtension 的下面方法
image.png

cachedWrapperClasses 对象里装着就是以父接口Protocol为构造函数参数的对象,包装类 ProtocolFilterWrapper 和 ProtocolListenerWrapper 这两个类都有 @Activate(order =)注解 用来排序使用
image.png

最后暴露的对象实际为:


image.png

ProtocolFilterWrapper 的责任链模式实现代码


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容