大数据学习
bigdata learning
Toggle navigation
大数据学习
主页
openGauss数据库
Flume
MongoDB
Hadoop
数据库实验
Kafka
Zookeeper
Hbase
Manual
Spark
Neo4j
InfluxDB
RabbitMQ
Flink
About Me
归档
标签
10-Zookeeper-watcher事件
Zookeeper
2022-10-17 19:47:21
21
0
0
bigdata
Zookeeper
zookeeper 的 watcher 机制,可以分为四个过程: * 客户端注册 watcher。 * 服务端处理 watcher。 * 服务端触发 watcher 事件。 * 客户端回调 watcher。 其中客户端注册 watcher 有三种方式,调用客户端 API 可以分别通过 getData、exists、getChildren 实现,利用前面章节创建的 maven 工程,新建 WatcherDemo 类,以 exists 方法举例说明其原理。 # 实例 ```java public class WatcherDemo implements Watcher { static ZooKeeper zooKeeper; static { try { zooKeeper = new ZooKeeper("127.0.0.1:2181", 4000,new WatcherDemo()); } catch (IOException e) { e.printStackTrace(); } } @Override public void process(WatchedEvent event) { System.out.println("eventType:"+event.getType()); if(event.getType()==Event.EventType.NodeDataChanged){ try { zooKeeper.exists(event.getPath(),true); } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) throws IOException, KeeperException, InterruptedException { String path="/watcher"; if(zooKeeper.exists(path,false)==null) { zooKeeper.create("/watcher", "0".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } Thread.sleep(1000); System.out.println("-----------"); //true表示使用zookeeper实例中配置的watcher Stat stat=zooKeeper.exists(path,true); System.in.read(); } } ``` 运行完程序,控制台显示:  此时启动 zookeeper 命令行终端,查看并且删除 **watcher** 节点:  IDE 控制台输出,触发了节点删除事件:  客户端发送请求给服务端是通过 TCP 长连接建立网络通道,底层默认是通过 java 的 NIO 方式,也可以配置 netty 实现方式。  注册 watcher 监听事件流程图:  # 本章源码下载 [download](https://hexo-img.obs.cn-east-3.myhuaweicloud.com/img/202210202251923.zip)
上一篇:
10-Neo4j-SET-ORDERBY
下一篇:
11-Flume案例-自定义source
文档导航