Dubbo-聊聊注册中心的设计

前言【Dubbo-聊聊注册中心的设计】Dubbo源码阅读分享系列文章,欢迎大家关注点赞
SPI实现部分

  1. Dubbo-SPI机制
  2. Dubbo-Adaptive实现原理
  3. Dubbo-Activate实现原理
  4. Dubbo SPI-Wrapper
注册中心作用在整个Duubbo架构中,注册中心主要完成以下三件事情:
  1. Provider应用启动后的初始化阶段会向注册中心完成注册操作;
  2. Consumer应用启动初始化阶段会完成对所需 Provider的进行订阅操作;
  3. 在Provider发生变更时通知监听的Consumer;
Registry在整个架构中主要是对Consumer 和 Provider 所对应的业务进行解耦,从而提升系统的稳定性 。关于为什么需要注册中心,大家可以参考一下微服务下的注册中心如何选择,在这篇文章中我花了一小节来介绍这个问题 。
源码分析开始之前,首先来看下关于注册中心源码的项目结构,整个项目由两块组成,一个就是核心Api,另外一个就是具体一些中间件的实现,看到这个我们可能会有一些想法,这个定然会有一些模板类以及一些工厂设计,能想到这里,说明你已经具有很好的抽象思维,废话不多说开始源码 。
Dubbo-聊聊注册中心的设计

文章插图
核心Apidubbo-registry-api是注册中心核心对象的抽象以及实现部分,我们首先来看下几个核心对象设计
Dubbo-聊聊注册中心的设计

文章插图
NodeNode位于Dubbo的dubbo-common项目下面,在Dubbo中Node这个接口用来抽象节点的概念,Node不仅可以表示Provider和Consumer节点,还可以表示注册中心节点 。Node节点内部定义三个方法:
  1. getUrl方法返回当前节点的URL;
  2. isAvailable方法方法返回对象是否可用;
  3. destroy方法负责销毁对象;
RegistryServiceRegistryService此接口定义注册中心的功能,定义五个方法:
  1. register方法向注册中心注册一个URL;
  2. unregister方法取消一个URL的注册;
  3. subscribe方法订阅一个URL,订阅成功之后,当订阅的数据发生变化时,注册中心会主动通知第二个参数指定的 NotifyListener对象,NotifyListener接口中定义的 notify() 方法就是用来接收该通知的;
  4. unsubscribe方法取消一个URL定义,同时当数据发生变化时候也会主动发起通知;

    经验总结扩展阅读