04.Curator操作ZooKeeper

引入依赖

<dependency>
	<groupId>org.apache.curator</groupId>
	<artifactId>curator-framework</artifactId>
	<version>4.0.0</version>
</dependency>
<dependency>
	<groupId>org.apache.curator</groupId>
	<artifactId>curator-recipes</artifactId>
	<version>4.0.0</version>
</dependency>

连接ZK

 CuratorFramework curatorFramework = CuratorFrameworkFactory.builder()
                .connectString(CONNECTION_STR)
                .sessionTimeoutMs(5000)
                .retryPolicy(new ExponentialBackoffRetry(1000, 3))
                .build();
      //ExponentialBackoffRetry是一种重试策略,是递增重试
        curatorFramework.start();

创建节点

curatorFramework.create().
				//递归创建
                creatingParentsIfNeeded().
                //znode类型为持久化(注意因为是递归创建所以不要是临时znode)
                withMode(CreateMode.PERSISTENT).
                //创建路径,内容出现在最后一个节点上
                forPath("/a/b", "test".getBytes());
                //inBackground()方法为异步执行

修改节点

 curatorFramework.setData()
                .forPath("/a/b", "test2".getBytes());

删除节点

 curatorFramework.delete()
 				//递归删除
                .deletingChildrenIfNeeded()
                .forPath("/a");

获取节点

//设置到参数后该值会被填充
 Stat stat=new Stat();
        byte[] bytes = curatorFramework.getData()
        		//获取状态信息并填充到参数中
                .storingStatIn(stat)
                .forPath("/a");
        String data = new String(bytes);
        System.out.println(data);
        System.out.println(stat.toString());

创建节点的时候设置权限

   List<ACL> aclList=new ArrayList<>();
        //第一个参数是操作类型
        //第二个参数是ID对象(第一个参数是权限模式,第二个是账号密码)
        //权限模式:ip,digest(账号密码),world(没啥用),Super(超级管理员)
        //DigestAuthenticationProvider.generateDigest()是加密
        ACL acl=new ACL(ZooDefs.Perms.READ|ZooDefs.Perms.ADMIN, new Id("digest", DigestAuthenticationProvider.generateDigest("root:123456")));
        aclList.add(acl);
        curatorFramework.create().withMode(CreateMode.PERSISTENT).withACL(aclList).forPath("/a","a".getBytes());

在已有节点上添加ACL

 		List<ACL> aclList=new ArrayList<>();
        ACL acl=new ACL(ZooDefs.Perms.READ|ZooDefs.Perms.ADMIN, new Id("digest", DigestAuthenticationProvider.generateDigest("root:123456")));
        aclList.add(acl);
        curatorFramework.setACL().withACL(aclList).forPath("/a");

监听当前节点

  NodeCache nodeCache=new NodeCache(curatorFramework, "/watch",false);
        NodeCacheListener nodeCacheListener=()->{
            System.out.println("触发监听了");
            System.out.println(nodeCache.getCurrentData().getPath()+"节点触发了监听");
            System.out.println("触发事件节点的数据是:"+new String(nodeCache.getCurrentData().getData()));
        };
        nodeCache.getListenable().addListener(nodeCacheListener);
        nodeCache.start();
        //防止线程结束
        System.in.read();

监听子节点

 PathChildrenCache pathChildrenCache=new PathChildrenCache(curatorFramework, "/watch",false);
        PathChildrenCacheListener pathChildrenCacheListener=(curatorFramework1,pathChildrenCacheEvent)->{
            System.out.println("类型是:"+pathChildrenCacheEvent.getType());
            System.out.println("触发事件节点是:"+pathChildrenCacheEvent.getData().getPath());
            System.out.println("触发事件节点的数据是:"+new String(pathChildrenCacheEvent.getData().getData()));

        };
        pathChildrenCache.getListenable().addListener(pathChildrenCacheListener);
        pathChildrenCache.start();
        //防止线程结束
        System.in.read();

判断节点是否存在

 Stat stat = curatorFramework.checkExists().forPath("/watch1");
        //如果不存在就是null
        System.out.println(stat);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值