zookeeper
2016-05-20 18:56
330 查看
最近在同事指点下,写了一个zookeeper进行配置维护的工程,代码地址如下https://github.com/GOvoid/jwq/tree/master/eby-configuration
其中有一点,
znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的集中管理,集群管理,分布式锁等等。
zookeeper可以用watcher进行监控,如果watcher监测到变化,进行相应操作后,则监控停止,需要重新定义一个watcher。
有没有定义一次,一直监控的方法呢,答案是有的,代码如下。可以指定znode以及针对不同事件进行的处理
其中有一点,
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算法
相关文章推荐
- jQuery实现通知自动消失
- 【bzoj4603】【SDOI2016】【平凡的骰子】【计算几何】
- 如何使用iAd在应用程序中展示Banner广告
- 充电桩解决方案-计费控制单元
- 2. Add Two Numbers(Linked List)
- 剑指Offer——求1-n的和值
- Android 第一次接触Matrix
- 在Windows下搭建C++11 编译环境(附下载,包括mingw-build,TDM-GCC, nuwen MinGW Distro)
- 简单视频播放软件设计
- Man——send(2)翻译
- Eclipse 4.4(luna) 安装fatjar插件时报错的问题
- sixth-多视图应用
- EventBus的使用与深入学习
- 理解A*寻路算法具体过程
- lamp (module) 部署应用
- 在Ubuntu上安装redmine
- Effective cpp 读书笔记8
- 关于jQuery里面的选择器
- Android之Activity之间的数据传递-intent-bundle
- 127.0.0.1与本机ip的区别