dubbo注册中心

2019-10-21  本文已影响0人  疯狂的小强_94ee

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);

具体实现由子类来实现。

上一篇 下一篇

猜你喜欢

热点阅读