curator - 节点类型

curator 节点类型

基于 curator 5.x

原生的 zookeeper 需要每次注册watcher 才可以监听,curator 提供了三种类型节点的监听,可以反复使用

  • NodeCache

    • 对一个节点进行监听,监听事件包括指定路径的增删改操作,
    • 可以深度监听, 如监听了 /node, 则对 其底下的创建修改,删除都能操作,如创建 /node/bb/cc
  • PathChildrenCache

    • 对指定路径节点的所有子目录监听,不对该节点的操作监听,对其子目录的增删改操作监听
  • TreeCache

    • 综合NodeCache和PathChildrenCahce的特性,是对整个目录进行监听,可以设置监听深度

NodeCache

public void nodeListener() {
        CuratorCache cache = CuratorCache.builder(client, "/node").build();
        CuratorCacheListener listener = CuratorCacheListener.builder().forAll(new CuratorCacheListener() {
            @Override
            public void event(Type type, ChildData oldData, ChildData data) {
                switch (type) {
                    case NODE_CHANGED:
                        System.out.println("单节点变化: " + type + ":" + data.getPath());
                        break;
                    case NODE_CREATED:
                        System.out.println("单节点变化: " + type + ":" + data.getPath());
                        break;
                    case NODE_DELETED:
                        System.out.println("单节点变化: " + type + ":" + oldData.getPath());
                        break;
                    default:
                        break;
                }
            }
        }).build();
        cache.listenable().addListener(listener);
        cache.start();
    }

结果:

单节点变化: NODE_CREATED:/node
单节点变化: NODE_CREATED:/node/cc
单节点变化: NODE_CREATED:/node/cc/aa
单节点变化: NODE_DELETED:/node/cc/aa
单节点变化: NODE_DELETED:/node/cc
单节点变化: NODE_CREATED:/node/cc
单节点变化: NODE_CHANGED:/node/cc
单节点变化: NODE_DELETED:/node/cc
单节点变化: NODE_DELETED:/node

PathChildrenCache

当前监听 /path, 只对当前节点的子节点操作监听有效,对当前节点 /path 任何操作都不会产生监听

    public void pathChildrenCacheListener() {
        CuratorCache cache = CuratorCache.builder(client, "/path").build();
        CuratorCacheListener listener = CuratorCacheListener.builder().forPathChildrenCache("/path", client,
                new PathChildrenCacheListener() {
            @Override
            public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {
                PathChildrenCacheEvent.Type type = event.getType();
                if (event.getData() != null) {
                    String pt = event.getData().getPath();
                    System.out.println("PathChild-节点变化:" + type + ":" + pt);
                } else {

                    System.out.println("PathChild-节点变化:" + type);
                }
            }
        }).build();
        cache.listenable().addListener(listener);
        cache.start();
    }

结果

PathChild-节点变化:CHILD_ADDED:/path/bb
PathChild-节点变化:CHILD_ADDED:/path/bb/cc
PathChild-节点变化:CHILD_UPDATED:/path/bb/cc
PathChild-节点变化:CHILD_REMOVED:/path/bb/cc
PathChild-节点变化:CHILD_REMOVED:/path/bb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值