11. Dubbo原理解析-注册中心之接口介绍

服务注册与发现的中心,服务的提供者将服务发布到注册中心,服务的使用着到注册中引用服务。

Dubbo的注册中心提供了多种实现,其实现是基于dubbo的spi的扩展机制的,使用着可以直接实现自己的注册中心。

@SPI( "dubbo")

public interface RegistryFactory {

   /**

    * 连接注册中心.

    * 连接注册中心需处理契约

    * 1. 当设置check=false时表示不检查连接,否则在连接不上时抛出异常。

    * 2. 支持URL上的username:password权限认证。

    * 3. 支持backup=10.20.153.10备选注册中心集群地址。

    * 4. 支持file=registry.cache本地磁盘文件缓存。

    * 5. 支持timeout=1000请求超时设置。

    * 6. 支持session=60000会话超时或过期设置。

    * @param url 注册中心地址,不允许为空

    * @return 注册中心引用,总不返回空

    */

    @Adaptive({ "protocol"})

    RegistrygetRegistry(URL url);

}

 

RegistryFactory用来创建注册中心, 默认的注册中心是dubbo协议,由于阿里的注册中心并没有开源,dubbo协议注册中心只提供了一个简单实现。 开源dubbo的注册中心推荐使用zookeeper。这里我们主要去分析基于dubbo和zookeeper协议的注册中心实现及使用。

 

注册中心服务类图:

服务接口定义

public interface RegistryService {

    void register(URL url);

    void unregister(URL url);

    void subscribe(URL url, NotifyListener listener);

    void unsubscribe(URL url, NotifyListener listener);

List<URL> lookup(URL url);

}

 

Register:注册数据,比如:提供者地址,消费者地址,路由规则,覆盖规则,等数据。

注册需处理契约

     1. 当URL设置了check=false时,注册失败后不报错,在后台定时重试,否则抛出异常。

     2. 当URL设置了dynamic=false参数,则需持久存储,否则,当注册者出现断电等情况异常退出时,需自动删除。

     3. 当URL设置了category=routers时,表示分类存储,缺省类别为providers,可按分类部分通知数据。

     4. 当注册中心重启,网络抖动,不能丢失数据,包括断线自动删除数据。

     5. 允许URI相同但参数不同的URL并存,不能覆盖。

Unregister:取消注册

Subscribe:订阅符合条件的已注册数据,当有注册数据变更时自动推送

订阅需处理契

     1. 当URL设置了check=false时,订阅失败后不报错,在后台定时重试。

     2. 当URL设置了category=routers,只通知指定分类的数据,多个分类用逗号分隔,并允许星号通配,表示订阅所有分类数据。

     3. 允许以interface,group,version,classifier作为条件查询,如:interface=com.alibaba.foo.BarService&version=1.0.0

     4. 并且查询条件允许星号通配,订阅所有接口的所有分组的所有版本,或:interface=*&group=*&version=*&classifier=*

     5. 当注册中心重启,网络抖动,需自动恢复订阅请求

     6. 允许URI相同但参数不同的URL并存,不能覆盖

     7. 必须阻塞订阅过程,等第一次通知完后再返回。

Unsubscribe:取消订阅

Lookup: 查询符合条件的已注册数据,与订阅的推模式相对应,这里为拉模式,只返回一次结果

代码交流 2021