zookeeper watcher示例
示例说明:zookeeper server端,client端每100毫秒写入数据,另一个client端watch节点数据变化。
server端
参考这篇的server端。
http://xkorey.iteye.com/blog/2201301
数据生成端
public void increase(){
int inx=0;
try {
zk = new ZooKeeper("localhost:22801",2000,new ZKWatcher());
if(zk.exists(path,false)==null){
zk.create(path,new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
}
while (run){
zk.setData(path,(""+(inx++)).getBytes(),-1);
Thread.sleep(100);
}
System.out.println("maker ext. the value is:"+inx);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (KeeperException e) {
e.printStackTrace();
}
watch端
public class ZKEventCatcher implements Watcher, AsyncCallback.StatCallback{
String path = "/test_data_increase";
ZooKeeper zk=null;
Object o =new Object();
public void init(){
try {
zk = new ZooKeeper("localhost:8610",3000,this);
zk.exists(path,this);
synchronized (o){
o.wait();
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public void processResult(int i, String s, Object o, Stat stat) {
boolean exists;
switch (KeeperException.Code.get(i)) {
case OK:
exists = true;
break;
case NONODE:
exists = false;
break;
case SESSIONEXPIRED:
case NOAUTH:
return;
default:
zk.exists(s, true, this, stat);
return;
}
if(exists){
try {
String val = new String(zk.getData(path,false,null));
System.out.println(val);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void process(WatchedEvent event) {
String path = event.getPath();
if (event.getType() == Event.EventType.None) {
switch (event.getState()) {
case SyncConnected:
break;
case Expired:
break;
}
} else {
if (path != null) {
zk.exists(path, true, this, null);
}
}
}
public static void main(String[]args){
ZKEventCatcher catcher = new ZKEventCatcher();
catcher.init();
}
}
监听的结果是得到的数值是连续的、和数据生成端是一致的,并没有出现数值跳跃的情况。
结论:只要实现Watcher, AsyncCallback.StatCallback2 个类的方法。节点值变化zookeeper会触发这2个回调函数。所以只要在一开始exists的watcher设定为自己(this)。然后wait()就可以了。
官方链接:
http://zookeeper.apache.org/doc/trunk/javaExample.html
分享到:
相关推荐
由于没有具体的源代码,我们只能假设 `src` 目录下包含的是一个简单的 Zookeeper 客户端示例。通常,这样的示例会包括创建 Zookeeper 连接、创建节点、读取节点数据、设置节点数据、监听节点变化等基本操作。 例如...
2. **服务消费者(Service Consumer)**:同样使用 ZooKeeper 客户端,服务消费者可以监听上述路径,一旦有新的服务提供者注册或已有提供者注销,ZooKeeper 会触发 Watcher 事件,消费者可以据此更新本地的服务列表...
《Zookeeper Book Example》压缩包包含了Zookeeper在实际应用中的示例代码,这些例子旨在帮助开发者更好地理解和使用Zookeeper这一分布式协调服务。Zookeeper是由Apache软件基金会开发的一个开源项目,它提供了一种...
在`testzookeeper`文件中,你可以找到一个简单的Zookeeper日常操作示例,包括创建、读取、更新和删除Znode的操作。例如: - **创建**:使用`create`命令创建一个新的Znode。 - **读取**:使用`get`命令获取Znode的...
例如,通过研究源码,你可以了解如何自定义Watcher,或者如何在高并发环境下优化ZooKeeper的性能。同时,如果你计划为ZooKeeper贡献代码,那么深入研究源码是必不可少的步骤。 总的来说,这个压缩包中的内容是...
- Watcher是ZooKeeper中的事件监听器,可以在节点变化时触发回调函数,实现分布式事件通知。 10. **ZooKeeper选举算法**: - 通常采用Fast Leader Election算法,确保在分布式环境中快速选举出领导者。 通过深入...
Zookeeper是一款分布式协调服务,它为分布式应用程序提供了简单、高效且可靠的命名服务、配置管理、分布式同步和组服务。在Java开发中,我们通常使用Zookeeper的Java客户端来与Zookeeper服务器进行交互。本篇文章将...
这篇博客文章"ZooKeeper的简单使用"可能是介绍如何在实际项目中集成和操作ZooKeeper。 首先,ZooKeeper的核心概念包括节点(ZNode)、会话(Session)和watcher事件。ZNode是ZooKeeper数据存储的基本单位,每个...
在MySQL数据复制总线的例子中,Zookeeper用于协调各个组件,监控任务状态,确保数据复制的正确性和及时性。如果出现异常,Zookeeper能够通知监控模块进行故障处理。 5. **Master选举**: - 在分布式环境中,经常...
public class ZookeeperWatcher { private static final CountDownLatch connectedSignal = new CountDownLatch(1); public static void main(String[] args) throws Exception { ZooKeeper zookeeper = new ...
通过这个例子,开发者可以快速上手 Zookeeper 的基本操作。 **应用场景** 1. **Hadoop**:在 Hadoop 集群中,Zookeeper 用于管理 NameNode 和 JobTracker 的选举,保证服务的高可用。 2. **Kafka**:Kafka 使用 ...
以下是一个简单的基于Zookeeper的分布式锁实现示例: ```java @Service public class ZookeeperDistributedLock { @Autowired private CuratorFramework curatorFramework; private String lockPath = "/...
【Java大数据作业_4Zookeeper】的课后问题主要涵盖了Zookeeper在HBase中的作用、Zookeeper客户端连接信息获取、Zookeeper实现FIFO队列、MapReduce流程与中间结果的伪代码描述,以及倒排索引的编程实现。以下是详细...
这个例子展示了如何使用 Curator 创建一个 ZooKeeper 客户端,创建一个持久节点,并使用分布式锁进行资源独占。 总的来说,Curator 是一个强大的 ZooKeeper 客户端框架,它极大地降低了使用 ZooKeeper 进行分布式...
- Zookeeper中的节点称为znode,它可以存储数据并维护监视器(watcher)。 - Zookeeper可以实现配置管理、名字服务、分布式锁等分布式协调任务。 4. 分布式锁与同步机制 - 分布式锁是在分布式系统中同步多个节点...
简单的例子:假设我们我们有个20个搜索引擎的服务器(每个负责总索引中的一部分的搜索任务)和一个 总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集),一个备用的总服务器(负责当总服务器宕机时替换总...
文档中的例子主要演示了同步操作,但ZooKeeper的异步模式也为高性能的场景提供了强大的支持。 总结来说,ZooKeeper是一个功能强大的协调服务,能够帮助开发者解决分布式系统中的一系列问题,包括但不限于配置管理、...
3. **Watcher**:Watcher是Zookeeper的一个重要特性,它允许客户端对Zookeeper中的数据变化进行订阅。当数据发生变化时,Zookeeper会向注册了Watcher的客户端发送事件通知。 4. **原子性操作**:所有对Zookeeper的...