Dubbo 版本:3.1.2
自定义标签解析
在 DubboNamespaceHandler
中会添加 DubboDeployApplicationListener
,其继承了 ApplicationListener<ApplicationContextEvent>
关于ApplicationListener,可参考:Spring 事件基本使用
服务暴露
注意,在 ServiceConfig # doExportUrls
内部,有
List<URL> registryURLs = ConfigValidationUtils.loadRegistries(this, true);
会在 registry 的基础上再生成一个新的 注册地址
,其 protocol
为 service-discovery-registry
所以,向外暴露服务的时候,会执行 2 次
Wrapper 包装原理
在 getExtension 时,会加载 wrapper:存在一个只有一个参数的构造函数
,且其类型为 type
可将 type 理解为:
ExtensionLoader.getExtensionLoader(Class type)
时传入的参数
第一个 for 循环
第一个 for 循环的启动服务
为了 return new NettyPortUnificationServer(url, handler)
而经过了一些努力
在 new 的过程中,会执行到 NettyPortUnificationServer
类中的 doOpen()
方法,用于启动 netty
第二个 for 循环
第一个 for 循环的注册是:ServiceDiscoveryRegistry
第二个 for 循环的注册是:ZookeeperRegistry
第二个 for 循环的启动服务
因为第一个 for 循环中已经启动服务了,所以这里直接返回就行