process方法是Watcher接口中的一个回调方法,当ZooKeeper向客户端发送一个Watcher事件通知时,客户端就会对相应的process方法进行回调,从而实现对事件的处理。


import java.util.concurrent.CountDownLatch;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;public class WatcherZookeeper implements Watcher{// 集群连接地址private static final String CONNECT_ADDRES = "127.0.0.1:2181";// 会话超时时间private static final int SESSIONTIME = 2000;// 信号量,让zk在连接之前等待,连接成功后才能往下走.private static final CountDownLatch countDownLatch = new CountDownLatch(1);private static String LOG_MAIN = "【main】 ";private ZooKeeper zk;public void createConnection(String connectAddres, int sessionTimeOut) {try {zk = new ZooKeeper(connectAddres, sessionTimeOut, this);System.out.println(LOG_MAIN + "zk 开始启动连接服务器....");countDownLatch.await();} catch (Exception e) {e.printStackTrace();}}public boolean createPath(String path, String data) {try {this.exists(path, true);this.zk.create(path, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);System.out.println(LOG_MAIN + "节点创建成功, Path:" + path + ",data:" + data);} catch (Exception e) {e.printStackTrace();return false;}return true;}/*** 判断指定节点是否存在* * @param path*            节点路径*/public Stat exists(String path, boolean needWatch) {try {return this.zk.exists(path, needWatch);} catch (Exception e) {e.printStackTrace();return null;}}public boolean updateNode(String path,String data) throws KeeperException, InterruptedException {exists(path, true);this.zk.setData(path, data.getBytes(), -1);return false;}public void process(WatchedEvent watchedEvent) {// 获取事件状态KeeperState keeperState = watchedEvent.getState();// 获取事件类型EventType eventType = watchedEvent.getType();// zk 路径String path = watchedEvent.getPath();System.out.println("进入到 process() keeperState:" + keeperState + ", eventType:" + eventType + ", path:" + path);// 判断是否建立连接if (KeeperState.SyncConnected == keeperState) {if (EventType.None == eventType) {// 如果建立建立成功,让后程序往下走System.out.println(LOG_MAIN + "zk 建立连接成功!");countDownLatch.countDown();} else if (EventType.NodeCreated == eventType) {System.out.println(LOG_MAIN + "事件通知,新增node节点" + path);} else if (EventType.NodeDataChanged == eventType) {System.out.println(LOG_MAIN + "事件通知,当前node节点" + path + "被修改....");}else if (EventType.NodeDeleted == eventType) {System.out.println(LOG_MAIN + "事件通知,当前node节点" + path + "被删除....");}}System.out.println("--------------------------------------------------------");}public static void main(String[] args) throws KeeperException, InterruptedException {WatcherZookeeper zkClientWatcher = new WatcherZookeeper();zkClientWatcher.createConnection(CONNECT_ADDRES, SESSIONTIME);boolean createResult = zkClientWatcher.createPath("/qushenWatcher", "pa-644064");}}

ZooKeeper入门(三)zookeeper的Watcher机制相关推荐

  1. zookeeper的watcher机制

    ZooKeeper 提供了分布式数据的发布/订阅功能.一个典型的发布/阅模型系统定义了一种一对多的订阅关系,能够让多个订阅者同时监听某一个主题对象,当这个主题对象自身状态变化时,会通知所有订阅者,使它 ...

  2. Zookeeper之Watcher机制详解

    概念 Zookeeper提供了数据的发布/订阅功能.多个订阅者可监听某一特定主题对象(节点).当主题对象发生改变(数据内容改变,被删除等),会实时通知所有订阅者. Zookeeper采用了Watche ...

  3. zookeeper watch java_Apache ZooKeeper Watcher 机制源码解释

    分布式系统从根本上来说就是不同节点上的进程并发执行,并且相互之间对进程的行为进行协调处理的过程.不同节点上的进程互相协调行为的过程叫做分布式同步.许多分布式系统需要一个进程作为任务的协调者,执行一些其 ...

  4. Zookeeper的Watcher机制及Watcher原理分析

    Zookeeper的Watcher机制及Watcher原理分析 1 什么是Watcher监听机制 Watcher 监听机制是 Zookeeper中非常重要的特性,我们基于zookeeper上创建的节点 ...

  5. 品味ZooKeeper之Watcher机制_2

    品味ZooKeeper之Watcher机制 本文思维导图如下: 前言 Watcher机制是zookeeper最重要三大特性数据节点Znode+Watcher机制+ACL权限控制中的其中一个,它是zk很 ...

  6. zookeeper的watcher机制原理详解

    文章目录 客户端注册Watcher 服务端处理getData请求 服务端处理setData请求 客户端触发Watcher 我们都知道在zookeeper中存在watcher机制,查询服务端节点数据时可 ...

  7. Zookeeper(五)Watcher机制

    0.Watcher结构和传参 先看看Watcher定义的结构: public interface Watcher {/*** This interface defines the possible s ...

  8. zookeeper watcher机制

    2019独角兽企业重金招聘Python工程师标准>>> 客户端ClientWatchManager,管理由ClientXncn产生的watchers和handle events.在z ...

  9. 3分钟理解zookeeper的watcher机制

    代码呈上 package jeff.zookeeper.watcher;import java.util.List; import java.util.concurrent.CountDownLatc ...

最新文章

  1. Python多线程技术增加网站帖子的查看量
  2. asp.net在线预览txt文件(简单实现)
  3. flex项目,file not found错误解决
  4. C语言实现简单而通用的字典算法(附完整源码)
  5. php特性介绍(贼有用)
  6. Mahout kmeans聚类
  7. hadoop集群搭建 修改配置文件(三台主机都要配置)
  8. 人人可懂的机器学习入门要点和阅读路径:学什么?怎样学?
  9. 算法高级(38)-短网址(short URL)系统如何实现?
  10. 【LeetCode】剑指 Offer 46. 把数字翻译成字符串
  11. 【学步者日记】UnityEditor扩展菜单以及ScriptableObject
  12. java 日期 相差的天数_JAVA计算两个日期之间相差的天数
  13. 如何用python获得实时股票信息_【python】用命令行获取实时股票信息
  14. 大战设计模式【19】—— 享元模式
  15. 自动化运维工具puppet(四)
  16. 【美赛】美赛字体格式和排版要求
  17. kali安卓手机木马远控
  18. Ubuntu常用软件推荐,图文详细说明及下载
  19. 宏杉科技引领数据中心全IP化潮流 一站式存储专家优势凸显
  20. 微信无法定位 请打开定位服务器,微信定位开了还是无法定位(定位打开了无法获取位置)...

热门文章

  1. [阿里]基于多任务学习的CVR预估模型ESM2
  2. 推荐系统遇上深度学习(二十二):DeepFM升级版XDeepFM模型强势来袭!
  3. docker之container
  4. UITextFeild的基本属性
  5. 2019届宝鸡理数质检Ⅰ解析版
  6. 在 Raspberry Pi 3B 上安装最新版 Node-RED
  7. 20165105第三周学习总结
  8. Spring的两种属性注入方式
  9. 用redis实现消息队列
  10. C++基本入门资料搜集