内容相同的 网站,h5制作开发哪儿,项目进度计划甘特图,网站开发连接效果文章目录 1.watcher#xff08;监听器#xff09;1.1.watcher组成1.2.watcher特性1.3.watcher结构1.3.1.KeeperState#xff08;通知状态#xff09;1.3.2.EventType#xff08;事件类型#xff09;1.3.3.方法以及可被监控的时事件类型 2.watcher注册1.1.创建连接注册1.2… 文章目录 1.watcher监听器1.1.watcher组成1.2.watcher特性1.3.watcher结构1.3.1.KeeperState通知状态1.3.2.EventType事件类型1.3.3.方法以及可被监控的时事件类型 2.watcher注册1.1.创建连接注册1.2.判断节点是否存在1.3.获取节点数据1.4.获取子节点列表 1.watcher监听器 Zookeeper提供了分布式数据的发布/订阅功能可以让客户端订阅某个节点当节点发生变化(比如创建、修改、删除、数据获取、子节点获取)时可以通知所有的订阅者。另外还可以为客户端连接对象注册监听器可以监听到连接时的状态。这个实现机制在Zookeeper里面就是Watcher机制。watcher实现机制类似观察者模式。备注watcher监听是一次性的当watcher被触发之后需要重新注册才能监听。
1.1.watcher组成
服务端客户端客户端的监听管理器WatchManager
客户端注册watcher到服务器同时将watch对象保存到WatchManager中。当服务器监听到znode数据变化时通知客户端。同时客户端的WatchManager触发回调事件process()处理相应的逻辑完成一次完整的watcher流程。
1.2.watcher特性
序号名称说明1一次性watcher监听是一次性的当watcher被触发之后需要重新注册才能再次监听。2客户端顺序回调watcher回调是顺序执行。一个watcher如果有太多的回调逻辑可能会造成监听丢失的情况。3轻量级服务端通知客户端的最小单位是WatchEvent只包括通知状态、事件类型和节点路径客户端向服务端注册也是尽量减小数据单元这样设计的数据量和一次性的注册使Zookeeper的内存和网络的开销都很小。4时效性当session失效后watcher跟随失效。
1.3.watcher结构 1.3.1.KeeperState通知状态
序号名称说明1UnknownDeprecated未知。2Disconnected连接失败。3NoSyncConnectedDeprecated连接成功4SyncConnected连接成功5AuthFailed认证失败6ConnectedReadOnly只读模式的连接成功。7SaslAuthenticatedsasl认证失败。8Expiredsession会话过期。
1.3.2.EventType事件类型
序号名称说明1None当KeeperState发生变化时候。2NodeCreated节点被创建。3NodeDeleted节点被删除。4NodeDataChanged节点数据被修改。5NodeChildrenChanged
1.3.3.方法以及可被监控的时事件类型
序号名称NodeCreatedNodeChildrenChangedNodeDataChangedNodeDeleted1zooKeeper.exists(/test, Watcher);√√√2zooKeeper.getData(/test, Watcher);√√3zooKeeper.getChildren(/test, Watcher);√√
2.watcher注册
1.1.创建连接注册
public void createConn() throws IOException, InterruptedException {//1.connectString: 服务器ip、port//2.sessionTimeout: 客户端与服务端的会话超时时间单位ms//3.watcher: 监听器对象zooKeeper new ZooKeeper(127.0.0.1:2181, 10000, new Watcher() {Overridepublic void process(WatchedEvent watchedEvent) {//创建连接成功if (watchedEvent.getState()Event.KeeperState.SyncConnected){System.out.println(zookeeper连接创建成功!);//countDownLatch.countDown();}}});//countDownLatch.await();
}1.2.判断节点是否存在
/***可监听事件类型* 1.NodeCreated* 2.NodeDataChanged* 3.NodeDeleted*///1.watch:是否使用连接对象的监听器
zooKeeper.exists(String path, boolean watch);//2.watcher:自定义监听器
zooKeeper.exists(String path, Watcher watcher);1.3.获取节点数据
/***可监听事件类型* 1.NodeDataChanged* 2.NodeDeleted*///1.watch:是否使用连接对象的监听器
zooKeeper.getData(String path, boolean watch, Stat stat);//2.watcher:自定义监听器
zooKeeper.getData(String path, Watcher watcher, Stat stat);1.4.获取子节点列表
/***可监听事件类型* 1.NodeChildrenChanged* 2.NodeDeleted*///1.watch:是否使用连接对象的监听器
zooKeeper.getChildren(String path, boolean watch);//2.watcher:自定义监听器
zooKeeper.getChildren(String path, Watcher watcher);