Java zookeeperAPI操控节点

zookeeper操控节点

连接zookeeper

public static void main(String[] args) throws Exception {
    //计数器对象
    final CountDownLatch latch = new CountDownLatch(1);
    //创建连接是一个异步的过程,因此需要计数器进行线程等待,创建成功后释放线程
    ZooKeeper zooKeeper = new ZooKeeper("你的zkIP", 5000, new Watcher() {
        //创建连接成功后
        public void process(WatchedEvent event) {
            if(event.getState() ==Watcher.Event.KeeperState.SyncConnected){
                System.out.println("连接创建成功");
                latch.countDown();
            }
        }
    });
    //主线程阻塞等待连接对象的创建成功
    latch.await();
    System.out.println("----"+zooKeeper.getSessionId()+"----");
    zooKeeper.close();
}

新建节点

新建节点同步方式:
create(String path, byte data[], List acl,CreateMode createMode)
新建节点异步方式:
create(String path, byte data[], List acl,CreateMode createMode, StringCallback cb, Object ctx)
参数说明:
path:-znode路径
data:节点数据内容
acl:访问控制列表
createMode:节点的类型,枚举类
cb:异步回调接口
ctx:传递上下文参数(回调函数会将ctx返回)

world授权

//节点路径 /create
//节点数据 create
//权限列表: world:anyone:adrwa
//节点类型:持久化节点

//cdrwa权限
zooKeeper.create("/create","create".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

ZooDefs.Ids的类别:
OPEN_ACL_UNSAFE : 完全开放的ACL,任何连接的客户端都可以操作该属性znode
CREATOR_ALL_ACL : 只有创建者才有ACL权限
READ_ACL_UNSAFE:只能读取ACL

CreateMode类型:
PERSISTENT–持久型
PERSISTENT_SEQUENTIAL–持久顺序型
EPHEMERAL–临时型
EPHEMERAL_SEQUENTIAL–临时顺序型

List<ACL> acls = new ArrayList<ACL>();
Id id = new Id("world", "anyone");
//rw权限
acls.add(new ACL(ZooDefs.Perms.READ,id));
acls.add(new ACL(ZooDefs.Perms.WRITE,id));
zooKeeper.create("/create/node2","node2".getBytes(), acls, CreateMode.PERSISTENT);

IP授权

List<ACL> acls = new ArrayList<ACL>();
Id id = new Id("ip", "192.168.10.132");
acls.add(new ACL(ZooDefs.Perms.ALL,id));
zooKeeper.create("/create/node3","node3".getBytes(), acls, CreateMode.PERSISTENT);

Auth授权

//添加授权用户
zooKeeper.addAuthInfo("digest","admin:admin".getBytes());<br>     //给予所有权限
zooKeeper.create("/create/node4","node4".getBytes(), ZooDefs.Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);

digest授权

//授权模式和授权对象
Id id = new Id("digest", "wj:64ibjjwm94195LPhuzhUdkIjOl0=");
//所有权限
acls.add(new ACL(ZooDefs.Perms.ALL,id));
zooKeeper.create("/create/node5","node5".getBytes(), acls, CreateMode.PERSISTENT);

异步方式创建节点

//异步方式创建节点
zooKeeper.create("/create/node6", "node6".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT, new AsyncCallback.StringCallback() {
    public void processResult(int rc, String path, Object ctx, String name) {
      //rc=0表示创建成功
      //path,name都表示路径
      //ctx:回调函数上下文context....
 System.out.println(rc+"=="+path+"=="+ctx+"=="+name);
    }
},"context....");
Thread.sleep(10000);
System.out.println("end...");

修改节点

在这里插入图片描述

同步

// 修改节点/root/childone下的数据,第三个参数为版本,如果是-1,那会无视被修改的数据版本,直接改掉,但如果输入版本号错误就会修改失败
Stat s= zk.setData("/root/childone", "childonemodify".getBytes(), -1);

异步


zooKeeper.setData("/node_6", "234".getBytes(), -1, new AsyncCallback.StatCallback(){

    @Override
    public void processResult(int rc, String path, Object ctx, Stat stat) {
        StringBuilder sb = new StringBuilder();
        sb.append("rc="+rc).append("\n");
        sb.append("path"+path).append("\n");
        sb.append("ctx="+ctx).append("\n");
        sb.append("Stat="+stat).append("\n");
        System.out.println(sb.toString());
    }       
,"context....");
Thread.sleep(10000);
System.out.println("end...");

删除节点

在这里插入图片描述

同步

// 删除节点/delete/node1,第二个参数为版本,如果是-1,那会无视被删除的数据版本,直接删掉,但如果输入版本号错误就会删除失败
zooKeeper.delete("/delete/node1",-1);

异步

//VoidCallback:异步回调接口
zooKeeper.delete("/delete/node2", -1, new AsyncCallback.VoidCallback() {
    public void processResult(int rc, String path, Object ctx) {
        System.out.println(rc);//0表示删除成功
        System.out.println(path);//节点路径
        System.out.println(ctx);//上下文信息
    }
},"ctx");
Thread.sleep(10000);
System.out.println("end...");

查看节点

在这里插入图片描述

同步

在这里插入图片描述

异步

在这里插入图片描述

查看子节点

在这里插入图片描述

同步

在这里插入图片描述

异步

在这里插入图片描述

查看节点是否存在

在这里插入图片描述

同步

在这里插入图片描述

异步

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桀骜浮沉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值