Zookeeper编程客户端

Zookeeper服务器有三种Java客户端;

Zookeeper: Zookeeper官方提供的原生java客户端;
Zkclient: 在原生zookeeper基础上进行扩展的开源第三方Java客户端;
Curator:Netflix公司在原生zookeeper基础上开源的Java客户端;

1.Curator编程客户端

API文档: https://zookeeper.apache.org/doc/current/api/index.html

主要API:

create: 创建结点;
delete: 删除结点;
exists: 判断结点是否存在;
get data: 读取结点数据;
set data: 写入结点数据;
get children: 获取结点的子结点;

public class CuratorClient01 {

    private static final String ADDRESS = "192.168.6.128:2181";

    private static final String ROOT_NODE = "/root/node";

    public static void main(String[] args) {
        // 设置重试策略,3次每次等待2秒
        RetryPolicy retry = new RetryNTimes(3,2000);
        CuratorFramework client = CuratorFrameworkFactory.newClient(ADDRESS, retry);
        // 启动客户端
        client.start();
        // 拿到zookeeper状态
        CuratorFrameworkState state = client.getState();
        System.out.println(state);
    }

}

持久化模式创建节点

client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT)
        .forPath(ROOT_NODE,"node helle data".getBytes());

在这里插入图片描述

修改节点信息

        /**
         *
         * 2.更新节点信息必须指定节点的版本,-1表示任何版本都可以
         *
         */
        Stat stat = client.setData().withVersion(-1).forPath(ROOT_NODE, "node data change".getBytes());
        System.out.println(stat.toString());

在这里插入图片描述

读取节点信息

    // 读取状态数据
    Stat stat = new Stat();
    byte[] bytes = client.getData().storingStatIn(stat).forPath(ROOT_NODE);
    // 数据
    System.out.println(new String(bytes));
    // 状态信息
    System.out.println(stat.toString());

查询节点信息

       List<String> list = client.getChildren().forPath("/root");
        for (String s : list) {
            System.out.println(s);
        }

判断节点是否存在

        Stat stat1 = client.checkExists().forPath("/root");
        if(stat1 == null ){
            System.out.println("节点不存在");
        }
        else{
            System.out.println("节点存在");
        }

在这里插入图片描述

删除节点

        /**
         * 子节点一起删除
         */
        client.delete().deletingChildrenIfNeeded().forPath("/root");

监听节点

final NodeCache nodeCache = new NodeCache(client,ROOT_NODE);
        // 是否拿到节点数据
        nodeCache.start(true);
        if(nodeCache.getCurrentData() != null){
            byte[] data = nodeCache.getCurrentData().getData();
            System.out.println(new String(data));
        }
        else{
            System.out.println("没有拿到数据");
        }
        nodeCache.getListenable().addListener(new NodeCacheListener() {
            public void nodeChanged() throws Exception {
                System.out.println("监听到事件了:");
                byte[] data = nodeCache.getCurrentData().getData();
                System.out.println(new String(data));
                System.out.println("节点数据:"+nodeCache.getPath());
            }
        });

在这里插入图片描述
在这里插入图片描述

监听子节点

PathChildrenCache pathChildrenCache = new PathChildrenCache(client,ROOT_NODE,true);
        // 设置启动模式
        pathChildrenCache.start(PathChildrenCache.StartMode.POST_INITIALIZED_EVENT);
        pathChildrenCache.getListenable().addListener(new PathChildrenCacheListener() {
            public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {
                byte[] bytes1 = event.getData().getData();
                new String(bytes1);
                new String(event.getData().getData());
                System.out.println("节点数据:["+new String(event.getData().getData())+"]");
                PathChildrenCacheEvent.Type eventType = event.getType();
                System.out.println("事件类型:["+eventType.name()+"]");
            }
        });

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值