IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> zookeeper CuratorFramework基本使用方法 -> 正文阅读

[大数据]zookeeper CuratorFramework基本使用方法

参考:Zookeeper框架Curator使用 - 扎心了,老铁 - 博客园 (cnblogs.com)

1,引入依赖

        <!--zookeeper-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.8</version>
        </dependency>
        <!--CuratorFramework是一款连接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>

2,测试

@Test
    public void method() throws Exception {
        //重试策略
        ExponentialBackoffRetry exponentialBackoffRetry = new ExponentialBackoffRetry(1000,3,3);
        //创建客户端
        CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", 3000, 3000, exponentialBackoffRetry);
        //启动客户端
        client.start();

        client.create().forPath("/testapi");
        //创建一个有内容的节点数据
        client.create().forPath("/a","hello world".getBytes());
        //创建一个多级目录的节点
        client.create().creatingParentsIfNeeded().forPath("/b/b1/b2","good".getBytes());
        //创建一个带序号的持久节点 PERSISTENT_SEQUENTIAL:带序号的 相当于命令行的 -s
        client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT_SEQUENTIAL).forPath("/c/c1","niubi".getBytes());
        //创建临时节点 设置时延5秒关闭
        client.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath("/d","nb".getBytes());
        //创建临时有序节点
        client.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL_SEQUENTIAL).forPath("/e","6666".getBytes());
        //设置时延5秒关闭
        Thread.sleep(5000);
        client.close();
    }
    @Test
    public void method2() throws Exception {
        //重试策略
        RetryPolicy exponentialBackoffRetry = new ExponentialBackoffRetry(1000,3,3);
        //创建客户端
        CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", 3000, 3000, exponentialBackoffRetry);
        //启动客户端
        client.start();

        //修改节点数据
        client.setData().forPath("/testapi","setData".getBytes());

        //关闭客户端
        client.close();
    }
    @Test
    public void method3() throws Exception {
        //重试策略
        RetryPolicy exponentialBackoffRetry = new ExponentialBackoffRetry(1000,3,3);
        //创建客户端
        CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", 3000, 3000, exponentialBackoffRetry);
        //启动客户端
        client.start();

        //删除单节点
        client.delete().forPath("/testapi");
        //删除多层级结构的节点
        client.delete().deletingChildrenIfNeeded().forPath("/b");
        //强制删除节点,只要客户端会话有效,那么会持续删除,直到节点删除成功
        //例如遇到一些网络异常的情况的时候
        client.delete().guaranteed().deletingChildrenIfNeeded().forPath("/c");
        //
        client.close();
    }
    @Test
    public void method4() throws Exception {
        //重试策略
        RetryPolicy exponentialBackoffRetry = new ExponentialBackoffRetry(1000,3,3);
        //创建客户端
        CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", 3000, 3000, exponentialBackoffRetry);
        //启动客户端
        client.start();

        //创建节点
       // client.create().creatingParentsIfNeeded().forPath("/a","good".getBytes());
        //查询节点数据
        byte[] bytes = client.getData().forPath("/a");
        System.out.println(new String(bytes));

        client.close();
    }
Watch监听机制(NodeCache,PathChildrenCache,TreeCache)
@Test
    public void method5() throws Exception {
        //重试策略
        RetryPolicy exponentialBackoffRetry = new ExponentialBackoffRetry(1000,3,3000);
        //创建客户端
        CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", 1000, 1000, exponentialBackoffRetry);
        //启动客户端
        client.start();

        //Watch监听机制(NodeCache,PathChildrenCache,TreeCache)
        //NodeCache监听本节点
        //PathChildrenCache监听子节点
        //TreeCache监听本节点加子节点
        NodeCache nodeCache = new NodeCache(client, "/a");
        //true代表初始化时就获取节点的数据并且缓存到本地
        nodeCache.start(true);

        //获取节点数据,初始化
        System.out.println(new String(nodeCache.getCurrentData().getData()));

        //添加监听回调事件
        nodeCache.getListenable().addListener(new NodeCacheListener() {
            @Override
            public void nodeChanged() throws Exception {
                //值修改了就打印一下
                System.out.println(new String(nodeCache.getCurrentData().getData()));
            }
        });

        //此处不能关闭客户端
        //阻塞进程
        System.in.read();
    }
@Test
    public void method6() throws Exception {
        //重试策略
        RetryPolicy exponentialBackoffRetry = new ExponentialBackoffRetry(1000,3,3000);
        //创建客户端
        CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", 1000, 1000, exponentialBackoffRetry);
        //启动客户端
        client.start();
        client.create().creatingParentsIfNeeded().forPath("/q/q1/q2", "test".getBytes());
        //true代表把节点内容缓存起来
        PathChildrenCache pathChildrenCache = new PathChildrenCache(client, "/q/q1/q2",true);
        /*
        * POST_INITIALIZED_EVENT表示在启动时缓存子节点数据,并且提示初始化
        * NORMAL普通启动方式,在启动时缓存子节点数据
        * BUILD_INITIAL_CACHE:在启动时什么都不会输出,这种模式在执行start之前会先执行rebuild方法,而该方法不会发出任何通知
        * */
        /*
         * StartMode:初始化方式
         * POST_INITIALIZED_EVENT:异步初始化。初始化后会触发事件
         * NORMAL:异步初始化
         * BUILD_INITIAL_CACHE:同步初始化
         * */
        pathChildrenCache.start(PathChildrenCache.StartMode.BUILD_INITIAL_CACHE);

        List<ChildData> childDataList = pathChildrenCache.getCurrentData();
        System.out.println("当前数据节点的子节点数据列表:");
        for(ChildData cd : childDataList){
            String childData = new String(cd.getData());
            System.out.println(childData);
        }
        //添加监听
        pathChildrenCache.getListenable().addListener(new PathChildrenCacheListener() {
            public void childEvent(CuratorFramework ient, PathChildrenCacheEvent event) throws Exception {
                if(event.getType().equals(PathChildrenCacheEvent.Type.INITIALIZED)){
                    System.out.println("子节点初始化成功");
                }else if(event.getType().equals(PathChildrenCacheEvent.Type.CHILD_ADDED)){
                    System.out.println("添加子节点路径:"+event.getData().getPath());
                    System.out.println("子节点数据:"+new String(event.getData().getData()));
                }else if(event.getType().equals(PathChildrenCacheEvent.Type.CHILD_REMOVED)){
                    System.out.println("删除子节点:"+event.getData().getPath());
                }else if(event.getType().equals(PathChildrenCacheEvent.Type.CHILD_UPDATED)){
                    System.out.println("修改子节点路径:"+event.getData().getPath());
                    System.out.println("修改子节点数据:"+new String(event.getData().getData()));
                }
            }
        });
        //此处不能关闭客户端
        //阻塞进程
        System.in.read();
    }

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-29 09:09:56  更:2021-08-29 09:26:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:52:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码