1.概述
Dubbo 服务暴露有两种方式
本地暴露,JVM 本地调用。配置如下:
<dubbo:service scope=“local” />
<dubbo:service scope=“remote” />
在不配置 scope 的情况下,默认两种方式都暴露。
2.doExportUrls
本地暴露服务的顺序图如下:
我们看到 ServiceConfig#export() 方法中,会在配置初始化完成后,调用顺序图的起点 #doExportUrls() 方法,开始暴露服务。代码如下:
/**
* 暴露 Dubbo URL
*/
@SuppressWarnings({"unchecked", "rawtypes"})
private void doExportUrls() {
// 加载注册中心 URL 数组
List<URL> registryURLs = loadRegistries(true);
// 循环 `protocols` ,向逐个注册中心分组暴露服务。
for (ProtocolConfig protocolConfig : protocols) {
doExportUrlsFor1Protocol(protocolConfig, registryURLs);
}
}
2.1 loadRegistries
加载注册中心 com.alibaba.dubbo.common.URL 数组。代码如下
/**
* 加载注册中心 URL 数组
*
* @param provider 是否是服务提供者
* @return URL 数组
*/
protected List<URL> loadRegistries(boolean provider) {
// 校验 RegistryConfig 配置数组。
checkRegistry();
// 创建 注册中心 URL 数组
List<URL> registryList = new ArrayList<URL>();
if (registries != null && !registries.isEmpty()) {
for (RegistryConfig config : registries) {
// 获得注册中心的地址
String address = config.getAddress();