`
xkorey
  • 浏览: 153798 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

zookeeper-watcher- 简单例子

阅读更多
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



分享到:
评论

相关推荐

    zookeeper-server-client 简单例子

    由于没有具体的源代码,我们只能假设 `src` 目录下包含的是一个简单的 Zookeeper 客户端示例。通常,这样的示例会包括创建 Zookeeper 连接、创建节点、读取节点数据、设置节点数据、监听节点变化等基本操作。 例如...

    zookeeper-registry-example:zookeeper作为注册中心最朴素的例子

    2. **服务消费者(Service Consumer)**:同样使用 ZooKeeper 客户端,服务消费者可以监听上述路径,一旦有新的服务提供者注册或已有提供者注销,ZooKeeper 会触发 Watcher 事件,消费者可以据此更新本地的服务列表...

    zookeeper-book-example.zip

    《Zookeeper Book Example》压缩包包含了Zookeeper在实际应用中的示例代码,这些例子旨在帮助开发者更好地理解和使用Zookeeper这一分布式协调服务。Zookeeper是由Apache软件基金会开发的一个开源项目,它提供了一种...

    zookeeper 例子

    在`testzookeeper`文件中,你可以找到一个简单的Zookeeper日常操作示例,包括创建、读取、更新和删除Znode的操作。例如: - **创建**:使用`create`命令创建一个新的Znode。 - **读取**:使用`get`命令获取Znode的...

    zookeeper 例子 源码 jar

    例如,通过研究源码,你可以了解如何自定义Watcher,或者如何在高并发环境下优化ZooKeeper的性能。同时,如果你计划为ZooKeeper贡献代码,那么深入研究源码是必不可少的步骤。 总的来说,这个压缩包中的内容是...

    zookeeper代码例子

    - Watcher是ZooKeeper中的事件监听器,可以在节点变化时触发回调函数,实现分布式事件通知。 10. **ZooKeeper选举算法**: - 通常采用Fast Leader Election算法,确保在分布式环境中快速选举出领导者。 通过深入...

    zookeeper客户端Java代码示例.zip

    Zookeeper是一款分布式协调服务,它为分布式应用程序提供了简单、高效且可靠的命名服务、配置管理、分布式同步和组服务。在Java开发中,我们通常使用Zookeeper的Java客户端来与Zookeeper服务器进行交互。本篇文章将...

    ZooKeeper的简单使用

    这篇博客文章"ZooKeeper的简单使用"可能是介绍如何在实际项目中集成和操作ZooKeeper。 首先,ZooKeeper的核心概念包括节点(ZNode)、会话(Session)和watcher事件。ZNode是ZooKeeper数据存储的基本单位,每个...

    Zookeeper的应用场景.pdf

    在MySQL数据复制总线的例子中,Zookeeper用于协调各个组件,监控任务状态,确保数据复制的正确性和及时性。如果出现异常,Zookeeper能够通知监控模块进行故障处理。 5. **Master选举**: - 在分布式环境中,经常...

    zookeeper节点数据的监听与读写操作

    public class ZookeeperWatcher { private static final CountDownLatch connectedSignal = new CountDownLatch(1); public static void main(String[] args) throws Exception { ZooKeeper zookeeper = new ...

    Zookeeper

    通过这个例子,开发者可以快速上手 Zookeeper 的基本操作。 **应用场景** 1. **Hadoop**:在 Hadoop 集群中,Zookeeper 用于管理 NameNode 和 JobTracker 的选举,保证服务的高可用。 2. **Kafka**:Kafka 使用 ...

    springboot zookeeper 分布式锁

    以下是一个简单的基于Zookeeper的分布式锁实现示例: ```java @Service public class ZookeeperDistributedLock { @Autowired private CuratorFramework curatorFramework; private String lockPath = "/...

    java大数据作业_4Zookeeper

    【Java大数据作业_4Zookeeper】的课后问题主要涵盖了Zookeeper在HBase中的作用、Zookeeper客户端连接信息获取、Zookeeper实现FIFO队列、MapReduce流程与中间结果的伪代码描述,以及倒排索引的编程实现。以下是详细...

    Zookeeper开源客户端框架Curator简介与示例

    这个例子展示了如何使用 Curator 创建一个 ZooKeeper 客户端,创建一个持久节点,并使用分布式锁进行资源独占。 总的来说,Curator 是一个强大的 ZooKeeper 客户端框架,它极大地降低了使用 ZooKeeper 进行分布式...

    从Paxos到Zookeeper分布式一致性原理与实践

    - Zookeeper中的节点称为znode,它可以存储数据并维护监视器(watcher)。 - Zookeeper可以实现配置管理、名字服务、分布式锁等分布式协调任务。 4. 分布式锁与同步机制 - 分布式锁是在分布式系统中同步多个节点...

    ZooKeeper分布式系统协调-其他

    简单的例子:假设我们我们有个20个搜索引擎的服务器(每个负责总索引中的一部分的搜索任务)和一个 总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集),一个备用的总服务器(负责当总服务器宕机时替换总...

    zookeeper 编程文档

    文档中的例子主要演示了同步操作,但ZooKeeper的异步模式也为高性能的场景提供了强大的支持。 总结来说,ZooKeeper是一个功能强大的协调服务,能够帮助开发者解决分布式系统中的一系列问题,包括但不限于配置管理、...

    zk教程+插件+例子

    3. **Watcher**:Watcher是Zookeeper的一个重要特性,它允许客户端对Zookeeper中的数据变化进行订阅。当数据发生变化时,Zookeeper会向注册了Watcher的客户端发送事件通知。 4. **原子性操作**:所有对Zookeeper的...

Global site tag (gtag.js) - Google Analytics