Curator使用:事件监听

Posted june777

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Curator使用:事件监听相关的知识,希望对你有一定的参考价值。

监控节点值的变化

通过NodeCache 来监控节点值的变化。

代码

    cc.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath("/ephe_nd");
    NodeCache nodeCache = new NodeCache(cc,"/ephe_nd",false);
    nodeCache.start(true);
    nodeCache.getListenable().addListener(()->{
        //listener:ChildData{path='/ephe_nd', stat=122,123,1573801350026,1573801350095,1,0,0,72703122504417311,3,0,122, data=[118, 97, 108]}
        System.out.println("listener:"+nodeCache.getCurrentData());
    });
    cc.setData().forPath("/ephe_nd","val".getBytes());

    Thread.sleep(Integer.MAX_VALUE);

监控子节点值的变化

还有另外一个类可以监控子节点的变化,就是PathChildrenCache

代码

    cc.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath("/p1/p2/ephe_nd");
    PathChildrenCache pathChildrenCache = new PathChildrenCache(cc,"/p1",false);
    pathChildrenCache.start();
    pathChildrenCache.getListenable().addListener((client,event)->{
        //listener:PathChildrenCacheEvent{type=CHILD_ADDED, data=ChildData{path='/p1/p2', stat=128,155,1573802869312,1573803119532,5,11,0,0,2,1,153
, data=null}}
        System.out.println("listener:"+event);
    });
    cc.setData().forPath("/p1/p2/ephe_nd","t1".getBytes());
    cc.setData().forPath("/p1/p2","t2".getBytes());

    Thread.sleep(Integer.MAX_VALUE);

上面代码可以发现,监控的是p1节点,但是只有p2节点更改才会收到通知,ephe_nd节点变化是没有通知的。所以,只能监控子节点,再深就无法监控了。

以上是关于Curator使用:事件监听的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Cruator监听zookeeper事件变化

zookeeper开源客户端curator

Zookeeper -- Zookeeper JavaAPI相关操作(Curator介绍Curator API 常用操作(节点的CRUD,Watch事件监听)分布式锁模拟12306售票案例)

zookeeper概念 zookeeper常用客户端指令 Curator 事件监听 zookeeper分布式锁 ZooKeeper 集群搭建

zookeeper概念 zookeeper常用客户端指令 Curator 事件监听 zookeeper分布式锁 ZooKeeper 集群搭建

Zookeeper之Curator客户端对节点的一些监控事件的api使用