• zookeeper


    最近在同事指点下,写了一个zookeeper进行配置维护的工程,代码地址如下https://github.com/GOvoid/jwq/tree/master/eby-configuration

    其中有一点,

    znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的集中管理,集群管理,分布式锁等等。

    zookeeper可以用watcher进行监控,如果watcher监测到变化,进行相应操作后,则监控停止,需要重新定义一个watcher。

    有没有定义一次,一直监控的方法呢,答案是有的,代码如下。可以指定znode以及针对不同事件进行的处理

    import org.apache.curator.framework.recipes.cache.PathChildrenCache;
    import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent;
    import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener;
    private void regWatcherOnLineRserver(String group) throws Exception {
    final PathChildrenCache childrenCache = new PathChildrenCache(ZKClient.getClient(), "/" + group, false);
    childrenCache.start(PathChildrenCache.StartMode.NORMAL);
    childrenCache.getListenable().addListener(
    new PathChildrenCacheListener() {
    @Override
    public void childEvent(CuratorFramework client, PathChildrenCacheEvent event)
    throws Exception {
    switch (event.getType()) {
    case CHILD_ADDED:
    logger.debug("CHILD_ADDED: " + event.getData().getPath());
    break;
    case CHILD_REMOVED:
    logger.debug("CHILD_REMOVE: " + event.getData().getPath());
    synchronized (propMap) {
    propMap.remove(event.getData().getPath());
    }
    break;
    case CHILD_UPDATED:
    logger.debug("CHILD_UPDATED: " + event.getData().getPath());
    synchronized (propMap) {
    propMap.remove(event.getData().getPath());
    }
    break;
    default:
    break;
    }
    }
    }
    );
    }

    引用的包
    <dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>2.2.0-incubating</version>
    </dependency>
    zookeeper的核心算法是paxos,栋哥在讲分布式存储的执行顺序一致性时,讲到该算法,用大家都申请涨工资来做了个比喻,对自己理解该算法有很大帮助,后续需要继续研究一下,加深理解
    @TODO paxos算法
  • 相关阅读:
    02SpringMvc_springmvc快速入门小案例(XML版本)
    01SpringMvc_初识工作流程
    07JavaIO详解_字符流
    06JavaIO详解_IO流中的设计模式-装饰者模式
    05JavaIO详解_仿照IO源码自己去实现一个IO流(为了加深印象,本身没有价值)
    作为程序员,我到底在恐慌什么
    android:layout_weight详解
    Android 遍历界面控件
    一个Activity中使用两个layout实例
    Android获取文件的MD5值
  • 原文地址:https://www.cnblogs.com/govoid/p/5513202.html
Copyright © 2020-2023  润新知