Loading

Zookeeper:JavaAPI watcher机制

1.watcher架构

watcher由三个部分组成:

zookeeper服务端、zookeeper客户端、客户端的ZKWatchManager对象。

 

接口设计:

Watcher接口中含有一个内部接口Event,其中含有两个枚举KeeperStat(通知状态)和EventType(事件类型)

  

 

 

 以node节点为例,说明调用的注册方法和可监听时间间的关系:

注册方式 Created ChildrenChanged Changed Deleted
zk.exists("/node",watcher) 可监控   可监控 可监控
zk.getData("/node",watcher)     可监控 可监控
zk.getChildren("/node",watcher)   可监控   可监控

 

 

 

 

 

 2.注册Watcher

KeeperState 通知状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class ZKWatcher implements Watcher{
 
    static CountDownLatch latch = new CountDownLatch(1);
 
    static ZooKeeper zooKeeper;
 
    public static void main(String[] args) throws Exception{
        Watcher watcher;
        zooKeeper = new ZooKeeper("192.168.10.132:2181", 5000, new ZKWatcher());
        latch.await();
    }
 
    public void process(WatchedEvent event) {
        if(event.getType() == Event.EventType.None){
            if(event.getState() == Event.KeeperState.SyncConnected){
                System.out.println("连接成功");
                latch.countDown();
            }else if(event.getState() == Event.KeeperState.Disconnected){
                System.out.println("断开连接");
            }else if(event.getState() == Event.KeeperState.Expired){
                System.out.println("会话超时");
            }else if(event.getState() == Event.KeeperState.AuthFailed){
                System.out.println("认证失败");
            }
        }
 
    }
}

3.检查节点是否存在

1
2
3
4
5
6
7
//使用链接对象的监视器
exists(String path,boolean b)
//自定义监视器
exists(String path,Watacher watcher)
//NodeCreated:节点创建
//NodeDeleted:节点删除
//NodeDataChanged:节点内容发生变化

4.查看节点

1
2
3
4
5
6
7
//使用连接对象的监视器
getData(String path,boolean b,Stat stat)
//自定义监视器
getData(String path,Watcher w,Stat stat)
 
//NodeDeleted:节点删除
//NodeDataChanged:节点内容变化

5.查看子节点 

1
2
3
4
5
6
7
//使用连接对象的监视器
getChildren(String path,boolean b)
//自定义监视器
getChildren(String path,Watcher w)
 
//NodeDeleted:节点删除
//NodeChildrenChanged:子节点内容变化

  

posted @   秋风飒飒吹  阅读(730)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示