zoukankan      html  css  js  c++  java
  • 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算法
  • 相关阅读:
    JavaScript 随机产生十个整数,放入数组中,对这个数组进行降序排序,并获取到这个数组的最大值和最小值
    JavaScript输出换行
    JavaScript超时调用、间歇调用
    JavaScript内置对象
    JavaScript事件列表
    JavaScript 中 for-in和 for-of 的区别
    JavaScript break指定标签打破多层循环示例
    初识JavaScript
    HTML + CSS CSS设置背景图片后图片没有铺满屏幕等
    设计模式之工厂模式
  • 原文地址:https://www.cnblogs.com/govoid/p/5513202.html
Copyright © 2011-2022 走看看