dubbo服务注册流程

服务注册流程

RegistryProtocol

dubbo服务发布流程已经分析了发布服务流程还有服务注册流程

export

RegistryProtocol#export继续服务注册流程

  // 根据invoker中的url获取Registry实例: zookeeperRegistry
  // ListenerRegistryWrapper(ZookeeperRegistry) 后面注册服务阐述
  final Registry registry = getRegistry(originInvoker);
  // 获取要注册的到注册中心的URL: dubbo://ip:port
  final URL registeredProviderUrl = getUrlToRegistry(providerUrl, registryUrl);
  // decide if we need to delay publish
  boolean register = providerUrl.getParameter(REGISTER_KEY, true);
  // 是否配置了注册中心,如果是,则需要注册
  if (register) {
   
  	// 将ProviderURL注册到注册中心
      register(registryUrl, registeredProviderUrl);
  }

getRegistry

 protected Registry getRegistry(final Invoker<?> originInvoker) {
    
 		// 把 url 转化为对应配置的注册中心的具体协议 如:zookeeper://ip:port 
       URL registryUrl = getRegistryUrl(originInvoker);
       // 根据具体协议从registryFactory获取指定的注册中心实现 ZookeeperRegistry
       return registryFactory.getRegistry(registryUrl);
   }

RegistryProtocol#register

    public void register(URL registryUrl, URL registeredProviderUrl) {
     
    	// registryFactory是一个扩展点RegistryFactory$Adaptive
    	// 并且这个扩展点有一个包装类 RegistryFactoryWrapper 
    	// 最终获取的的registryFactory是RegistryFactoryWrapper(ZookeeperRegistryFactory)
    	// 这里获得的registry的是 ListenerRegistryWrapper(ZookeeperRegistry)
        Registry registry = registryFactory.getRegistry(registryUrl);
        registry.register(registeredProviderUrl);

        ProviderModel model = ApplicationModel.getProviderModel(registeredProviderUrl.getServiceKey());
        model.addStatedUrl(new ProviderModel.RegisterStatedURL(
                registeredProviderUrl,
                registryUrl,
                true
        ));
    }

RegistryFactory

方法级别自适应扩展点在RegistryProtocol 通过set依赖注入

@SPI("dubbo")
public interface RegistryFactory {
   
    @Adaptive({
   "protocol"})
    Registry getRegistry(URL url);
}

RegistryFactory扩展点的配置文件META-INF\dubbo\internal\org.apache.dubbo.registry.RegistryFactory

service-discovery-registry=org.apache.dubbo.registry.client.ServiceDiscoveryRegistryFactory
wrapper=org.apache.dubbo.registry.RegistryFactoryWrapper
dubbo=org.apache.dubbo.registry.dubbo.DubboRegistryFactory
multicast=org.apache.dubbo.registry.multicast.MulticastRegistryFactory
zookeeper=org.apache.dubbo.registry.zookeeper.ZookeeperRegistryFactory
redis=org.apache.dubbo.registry.redis.RedisRegistryFactory
consul=org.apache.dubbo.registry.consul.ConsulRegistryFactory

etcd3=org.apache.dubbo.registry.etcd.EtcdRegistryFactory
nacos=org
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值