聊聊nacos的DelegateConsistencyServiceImpl

本文主要研究一下nacos的DelegateConsistencyServiceImpl

ConsistencyService

nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/consistency/ConsistencyService.java

public interface ConsistencyService {
​
    /**
     * Put a data related to a key to Nacos cluster
     *
     * @param key   key of data, this key should be globally unique
     * @param value value of data
     * @throws NacosException
     * @see
     */
    void put(String key, Record value) throws NacosException;
​
    /**
     * Remove a data from Nacos cluster
     *
     * @param key key of data
     * @throws NacosException
     */
    void remove(String key) throws NacosException;
​
    /**
     * Get a data from Nacos cluster
     *
     * @param key key of data
     * @return data related to the key
     * @throws NacosException
     */
    Datum get(String key) throws NacosException;
​
    /**
     * Listen for changes of a data
     *
     * @param key      key of data
     * @param listener callback of data change
     * @throws NacosException
     */
    void listen(String key, RecordListener listener) throws NacosException;
​
    /**
     * Cancel listening of a data
     *
     * @param key      key of data
     * @param listener callback of data change
     * @throws NacosException
     */
    void unlisten(String key, RecordListener listener) throws NacosException;
​
    /**
     * Tell the status of this consistency service
     *
     * @return true if available
     */
    boolean isAvailable();
}
  • ConsistencyService定义了put、remove、get、listen、unlisten、isAvailable方法

DelegateConsistencyServiceImpl

nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/consistency/DelegateConsistencyServiceImpl.java

@Service("consistencyDelegate")
public class DelegateConsistencyServiceImpl implements ConsistencyService {
​
    @Autowired
    private PersistentConsistencyService persistentConsistencyService;
​
    @Autowired
    private EphemeralConsistencyService ephemeralConsistencyService;
​
    @Override
    public void put(String key, Record value) throws NacosException {
        mapConsistencyService(key).put(key, value);
    }
​
    @Override
    public void remove(String key) throws NacosException {
        mapConsistencyService(key).remove(key);
    }
​
    @Override
    public Datum get(String key) throws NacosException {
        return mapConsistencyService(key).get(key);
    }
​
    @Override
    public void listen(String key, RecordListener listener) throws NacosException {
​
        // this special key is listened by both:
        if (KeyBuilder.SERVICE_META_KEY_PREFIX.equals(key)) {
            persistentConsistencyService.listen(key, listener);
            ephemeralConsistencyService.listen(key, listener);
            return;
        }
​
        mapConsistencyService(key).listen(key, listener);
    }
​
    @Override
    public void unlisten(String key, RecordListener listener) throws NacosException {
        mapConsistencyService(key).unlisten(key, listener);
    }
​
    @Override
    public boolean isAvailable() {
        return ephemeralConsistencyService.isAvailable() && persistentConsistencyService.isAvailable();
    }
​
    private ConsistencyService mapConsistencyService(String key) {
        return KeyBuilder.matchEphemeralKey(key) ? ephemeralConsistencyService : persistentConsistencyService;
    }
}
  • DelegateConsistencyServiceImpl实现了ConsistencyService接口;其put、remove、get、listen、unlisten方法内部都使用了mapConsistencyService来判断是使用ephemeralConsistencyService还persistentConsistencyService;其isAvailable方法要求ephemeralConsistencyService及persistentConsistencyService都是available

小结

ConsistencyService定义了put、remove、get、listen、unlisten、isAvailable方法;DelegateConsistencyServiceImpl实现了ConsistencyService接口;其put、remove、get、listen、unlisten方法内部都使用了mapConsistencyService来判断是使用ephemeralConsistencyService还persistentConsistencyService;其isAvailable方法要求ephemeralConsistencyService及persistentConsistencyService都是available

doc

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程入门之C语言

Android native进程间通信实例-binder篇之——HAL层访问JAVA层的服务

有一天在群里聊天的时候,有人提出一个问题,怎样才能做到HAL层访问JAVA层的接口?刚好我不会,所以做了一点研究。

24640
来自专栏大数据成神之路

一个细节 | Java中asList的缺陷

今天在项目中的一段代码用了asList方法,出现了问题。作者于是仔细查看了asList的源码,在实际项目中避免出现错误的使用方式。希望对大家有帮助。

10230
来自专栏高性能服务器开发

搞 Java 的年薪 40W 是什么水平?

不知不觉已经工作 5 年了,一路走来磕磕碰碰但总算有了自己的一点小体会。对于一个 Java 开发人员来说,到了 5 年的关键节点,需要掌握哪些知识点呢?经过我自...

12420
来自专栏IT那个小笔记

Response响应

在去发送一个请求时,先会找到主机服务器再找到对应的Service,找到Servoce对应的引擎

18220
来自专栏IT那个小笔记

图片验证码

34750
来自专栏java技术大本营

tomcat学习|server.xml解析并初始化servlet容器

小刀博客: https://www.lixiang.red 小刀的公众号: 程序员学习大本营

9220
来自专栏java思维导图

Java数据结构-ArrayList最细致的解析笔记

ArrayList是一个类,这个类有一个数组参数elementData,ArrayList集合中的元素正是保存在这个数组中,它继承了数组查询的高性能,参考第3篇...

9330
来自专栏java一日一条

阿里面试:什么地方违反了双亲委派模型

类加载机制是指将类的class文件读入到内存,并为之创建一个java.lang.Class对象。中间对数据做了 校验,转换解析和初始化等操作。

25620
来自专栏IT那个小笔记

ServletContext

context.setAttribute(String name,Object value);

14040
来自专栏咸鱼学Python

JS逆向 | JSF*ck,这个看着头大的加密其实很简单

我遇到过有两款网站用的就是 JSFuck 加密的,这个转换风格第一次遇到的时候内心OS就和这个名字一样。

23450

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励