1.zookeeper的watches

1)可以理解为一个监听,ZooKeeper中的所有读取操作 - getData()getChildren()exists() - 都可以设置选择监视

2)watches的范围

创建事件,删除事件,更改事件,子事件

3)删除watches

我们可以通过调用removeWatches删除在znode上注册的手表

2.watches样例(java)

public class ZKDemo implements Watcher {
  private static CountDownLatch countDownLatch = new CountDownLatch(1);
  private static ZooKeeper zooKeeper;
  public static void main(String[] args) throws Exception {
    connetionZK("");
    close();
  }

  public static void connetionZK(String zk) throws IOException, KeeperException,   InterruptedException {
    //zookeeper的ip:端口
    String path = "192.168.10.150:2181";
    zooKeeper = new ZooKeeper(path, 20*1000, new ZKDemo());
    //创建节点并给值
    // createZnode(zooKeeper, "/test", "test1".getBytes());
    //子节点列表更改
    // createZnodeChild(zooKeeper, "/test", "test2".getBytes());
    //修改节点数据
    // createZnodeAndChanged(zooKeeper, "/test", "test3".getBytes());
    //创建并删除节点
    // createZnodeAndDelete(zooKeeper, "/test", "test4".getBytes());
    //数据节点下删除watch
    // createZnodeAndRMDataWatch(zooKeeper, "/test", "test5".getBytes());
    //子节点下删除watch
    // createZnodeAndRMChildWatch(zooKeeper, "/test", "test6".getBytes());
    countDownLatch.await();//阻塞程序继续执行
  }

  /**
  * 创建节点并给值
  * @param zooKeeper
  * @param path
  * @param data
  */
  public static void createZnode(ZooKeeper zooKeeper,String path,byte [] data) {
    //创建节点 路径,节点值,Watch,类型
    try {
      zooKeeper.exists(path, true);//使用默认的watcher,这里的默认指new ZooKeeper(path, 20*1000, new ZKDemo())时设置的watcher
      zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//
    } catch (KeeperException e) {
      e.printStackTrace();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }

  /**
  * 子节点列表更改
  * @param zooKeeper
  * @param path
  * @param data
  */
  public static void createZnodeChild(ZooKeeper zooKeeper,String path,byte [] data) {
    //创建节点 路径,节点值,Watch,类型
    try {
      zooKeeper.exists(path, true);//使用默认的watcher,这里的默认指new ZooKeeper(path, 20*1000, new ZKDemo())时设置的watcher
    zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//
    zooKeeper.getChildren(path, true);
    zooKeeper.create(path+"/child1", "child".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//
    } catch (KeeperException e) {
      e.printStackTrace();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }

  /**
  * 修改节点数据
  * @param zooKeeper
  * @param path
  * @param data
  */
  public static void createZnodeAndChanged(ZooKeeper zooKeeper,String path,byte [] data) {
    //创建节点 路径,节点值,Watch,类型
    try {
      zooKeeper.exists(path, true);//使用默认的watcher,这里的默认指new ZooKeeper(path, 20*1000, new ZKDemo())时设置的watcher
      zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//
      zooKeeper.exists(path, true);
      zooKeeper.setData(path, "Changed".getBytes(), -1);
    } catch (KeeperException e) {
      e.printStackTrace();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }

  /**
  * 创建并删除节点
  * @param zooKeeper
  * @param path
  * @param data
  */
  public static void createZnodeAndDelete(ZooKeeper zooKeeper,String path,byte [] data) {
    //创建节点 路径,节点值,Watch,类型
    try {
      zooKeeper.exists(path, true);//使用默认的watcher,这里的默认指new ZooKeeper(path, 20*1000, new ZKDemo())时设置的watcher
      zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//
      zooKeeper.exists(path, true);
      zooKeeper.delete(path, -1);
    } catch (KeeperException e) {
      e.printStackTrace();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }

  /**
  * 数据节点下删除watch
  * @param zooKeeper
  * @param path
  * @param data
  */
  public static void createZnodeAndRMDataWatch(ZooKeeper zooKeeper,String path,byte [] data) {
    //创建节点 路径,节点值,Watch,类型
    try {
      zooKeeper.exists(path, true);//使用默认的watcher,这里的默认指new ZooKeeper(path, 20*1000, new ZKDemo())时设置的watcher
      zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//
      zooKeeper.setData(path, "watch1".getBytes(), -1);
      ZKDemo zkDemo = new ZKDemo();
      byte[] bytes = zooKeeper.getData(path, zkDemo, new Stat());
      System.out.println(new String(bytes));
      zooKeeper.removeWatches(path, zkDemo, WatcherType.Data, true);
    } catch (KeeperException e) {
      e.printStackTrace();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }

  /**
  * 子节点下删除watch
  * @param zooKeeper
  * @param path
  * @param data
  */
  public static void createZnodeAndRMChildWatch(ZooKeeper zooKeeper,String path,byte [] data) {
    //创建节点 路径,节点值,Watch,类型
    try {
      ZKDemo zkDemo = new ZKDemo();
      zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//
      zooKeeper.create(path+"/child2", "child2".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//
      zooKeeper.setData(path, data, -1);
      zooKeeper.getChildren(path, zkDemo);
      zooKeeper.removeWatches(path, zkDemo, WatcherType.Children, true);
    } catch (KeeperException e) {
      e.printStackTrace();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }

  /**
  * 关闭zk
  */
  public static void close() {
    try {
      if (zooKeeper != null) {
        zooKeeper.close();
      }
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }

  public void process(WatchedEvent event) {
    countDownLatch.countDown();
    if (Event.KeeperState.SyncConnected == event.getState()) {//连接状态
      System.out.println("连接状态");
    } else if (Event.KeeperState.Disconnected == event.getState()) {//断开状态
      System.out.println("断开zookeeper");
    } else if (Event.KeeperState.AuthFailed == event.getState()) {//身份验证失败
      System.out.println("身份验证失败");
    } else if (Event.KeeperState.ConnectedReadOnly == event.getState()) {//连接只读状态
      System.out.println("连接只读状态");
    } else if (Event.KeeperState.SaslAuthenticated == event.getState()) {//sasl授权权限执行ZooKeeper操作
      System.out.println("sasl授权权限执行ZooKeeper操作");
    } else if (Event.KeeperState.Expired == event.getState()) {//服务器失效
      System.out.println("服务器失效");
    } else if (Event.KeeperState.Closed == event.getState()) {//客户端关闭
      System.out.println("客户端关闭");
    } else {
      System.out.println("未知");
    }
    System.out.println("**************************************");
    if (Event.EventType.None == event.getType()) {
      System.out.println(event.getType());
    } else if (Event.EventType.NodeCreated == event.getType()) {
      System.out.println(event.getType());
    } else if (Event.EventType.NodeDeleted == event.getType()) {
      System.out.println(event.getType());
    } else if (Event.EventType.NodeDataChanged == event.getType()) {
      System.out.println(event.getType());
    } else if (Event.EventType.NodeChildrenChanged == event.getType()) {
      System.out.println(event.getType());
    } else if (Event.EventType.DataWatchRemoved == event.getType()) {
      System.out.println(event.getType());
    } else if (Event.EventType.ChildWatchRemoved == event.getType()) {
      System.out.println(event.getType());
    } else {
      System.out.println("未知");
    }
      System.out.println("######################################");
    }
  }

转载于:https://www.cnblogs.com/ku-ku-ku/p/10980726.html

zookeeper学习二相关推荐

  1. ZooKeeper学习第七期--ZooKeeper一致性原理

    ZooKeeper学习第六期---ZooKeeper机制架构 ZooKeeper学习第一期---Zookeeper简单介绍 ZooKeeper学习第二期--ZooKeeper安装配置 ZooKeepe ...

  2. hadoop hive hbase 入门学习 (二)

    hadoop 自学系列                hadoop hive hbase 入门学习 (一) hadoop安装.hdfs学习及mapreduce学习 hadoop 软件下载 (hadoo ...

  3. ZooKeeper学习第四期---构建ZooKeeper应用

    ZooKeeper学习第一期---Zookeeper简单介绍 ZooKeeper学习第二期--ZooKeeper安装配置 ZooKeeper学习第三期---Zookeeper命令操作 ZooKeepe ...

  4. ZooKeeper学习笔记(八):ZooKeeper集群写数据原理

    写数据原理 写流程直接请求发送给Leader节点 这里假设集群中有三个zookeeper服务端 ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种 ...

  5. C#多线程学习(二) 如何操纵一个线程

    C#多线程学习(二) 如何操纵一个线程 原文链接:http://kb.cnblogs.com/page/42529/ [1] C#多线程学习(二) 如何操纵一个线程 [2] C#多线程学习(二) 如何 ...

  6. spring security 学习二

    spring security 学习二 doc:https://docs.spring.io/spring-security/site/docs/ 基于表单的认证(个性化认证流程): 一.自定义登录页 ...

  7. STL源码剖析学习二:空间配置器(allocator)

    STL源码剖析学习二:空间配置器(allocator) 标准接口: vlaue_type pointer const_pointer reference const_reference size_ty ...

  8. mysql用创建的用户登陆并修改表格_MySQL 基础学习二:创建一个用户表,并增删改查...

    MySQL 基础学习二:创建一个用户表,并 增删改查 提示:MySQL 命令建议都用大写,因为小写运行时,还是翻译成大写的. 第一步,创建一个用户表 1,打开控制台,进入数据库 C:\Users\Ad ...

  9. OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack()

    OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack() 参考博客: Harris角点检测原理详解 Harri ...

  10. OpenCV学习(二十二) :反向投影:calcBackProject(),mixChannels()

    OpenCV学习(二十二) :反向投影:calcHist(),minMaxLoc(),compareHist() 参考博客: 反向投影backproject的直观理解 opencv 反向投影 颜色直方 ...

最新文章

  1. oracle 逻辑回归,逻辑回归 (Logistic Regression):计算概率
  2. 新手入门深度学习 | 1-2:编译器Jupyter Notebook
  3. 这可能是人工智能、机器学习和大数据领域覆盖最全的一份速查表
  4. linux树莓派mysql_树莓派4B(二):搭建LNMP(LINUX+NIGIX+MYSQL+PHP)+ Pi Dashboard
  5. JAVA集合(笔记)
  6. 基坑监测日报模板_基坑监测有多重要?实录基坑坍塌过程,不亲身经历,不知道现场有多恐怖!...
  7. 探索MicroPython(一)--基础介绍
  8. Color.js增强你对颜色的控制
  9. leetcode哈希表解决异位词问题
  10. 窗体分为左右两部分,要求在左边栏点击按钮时,右边动态加载窗体
  11. 电子通信计算机行业分类,电子信息产业行业分类目录
  12. linux下类everthing搜索工具
  13. jupyter notebook 302 get打不开
  14. matlab 沃尔什矩阵,压缩感知——沃尔什-哈达玛(WHT)变换与逆变换的Matlab代码实现...
  15. 关于qqv8.8.17版如何关闭QQ看点
  16. coursera使用前准备
  17. Blender 建模案例一(1)
  18. 【算法】求解钱币兑换问题
  19. 网页设计有难题?12款网页设计模板给你灵感!
  20. 循环语句(while循环)

热门文章

  1. mysql 5.7.9 winx64_Windows 7 安装配置 mysql-5.7.17-winx64 方法-Fun言
  2. Java Set操作
  3. kafka入门1-集群生产消息 报:ERROR Producer connection to localhost:9092 unsuccessful
  4. 天梯赛座位分布-一点都不垃圾的模拟题,代码长度超过100行的都是傻子
  5. mysql 临时表 创建和插入
  6. Android VideoVIew 视频全屏拉伸
  7. 采用单/双缓冲区需要花费的时间
  8. css----苹果移动端以及小程序滚动模块卡顿的处理
  9. Exp4恶意软件分析 20154326杨茜
  10. HDU3501——欧拉函数裸题