dubbo注册中心

1 设计模式

1.1 工厂模式

public Registry getRegistry(URL url) {

. . . 

// Lock the registry access process to ensure a single instance of the registry

    LOCK.lock();

try {

Registry registry =REGISTRIES.get(key);

if (registry !=null) {

return registry;

}

registry = createRegistry(url);

if (registry ==null) {

throw new IllegalStateException("Can not create registry " + url);

}

REGISTRIES.put(key, registry);

return registry;

}finally {

// Release the lock

        LOCK.unlock();

}

}

protected abstract Registry createRegistry(URL url);

AbstractRegistryFactory 实现了RegistryFactory接口的getRegistry(URL url) ,是一个通用实现,主要完成了加锁,以及调用抽象模版方法createRegistry(URL url)创建具体实现等操作,并缓存在内存中。抽象模版方法会由具体子类继承并实现。



1.2 模版模式

AbstractRegistry 实现了Registry接口中的注册,订阅,查询,通知等方法,还实现了磁盘文件持久化注册信息这一通用方法。但是注册,订阅,查询,通知等方法只是简单地把URL加入对应的集合,没有具体的注册或订阅逻辑。

FailbackRegistry 继承了AbstractRegistry,重写了父类的注册,订阅,查询和通知等方法,并且添加了重试机制,此外,还添加了四个未实现的抽象模版方法。

// ==== Template method ====

protected abstract void doRegister(URL url);

protected abstract void doUnregister(URL url);

protected abstract void doSubscribe(URL url, NotifyListener listener);

protected abstract void doUnsubscribe(URL url, NotifyListener listener);

具体实现由子类来实现。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。