Loading

Zookeeper:JavaApi创建节点

一.pom文件和log4j.properties

二.Java连接Zookeeper

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void main(String[] args) throws Exception {
    //计数器对象
    final CountDownLatch latch = new CountDownLatch(1);
    //     * @param sessionTimeout
    //     *            session timeout in milliseconds
    //     * @param watcher
    //     *            a watcher object which will be notified of state changes, may
    //     *            also be notified for node events
    ZooKeeper zooKeeper = new ZooKeeper("192.168.10.132:2181", 500, 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();
}

 控制台打印情况:

 三.创建节点

1
2
3
4
//同步方式
create(final String path, byte data[], List<ACL> acl,CreateMode createMode)
//异步方式
create(final String path, byte data[], List<ACL> acl,CreateMode createMode,  StringCallback cb, Object ctx)

参数说明:

path:-znode路径

data:节点数据内容

acl:访问控制列表

createMode:节点的类型,枚举类

cb:异步回调接口

ctx:传递上下文参数

1
2
3
4
5
//节点路径  /create
//节点数据  create
//权限列表: world:anyone:adrwa
//节点类型:持久化节点
zooKeeper.create("/create","create".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

world授权:

1
2
3
4
5
List<ACL> acls = new ArrayList<ACL>();
Id id = new Id("world", "anyone");
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授权:

1
2
3
4
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授权:

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

 

 digest授权:

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

 创建持久化有序节点:

输出结果为节点路径

1
String s = zooKeeper.create("/create/node6","node6".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);<br>System.out.println(s);

CreateMode枚举类介绍:

 异步方式创建节点:

1
2
3
4
5
6
7
8
//异步方式创建节点
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) {
        System.out.println(rc+"=="+path+"=="+ctx+"=="+name);
    }
},"context....");
Thread.sleep(5000);
System.out.println("end...");
posted @   秋风飒飒吹  阅读(966)  评论(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
点击右上角即可分享
微信分享提示