使用java操作zookeeper api

使用java操作zookeeper api

1.使用jdk1 .8

2.导入依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--zookeeper的依赖-->
        <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>3.3.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>3.3.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.google.collections/google-collections -->
        <dependency>
            <groupId>com.google.collections</groupId>
            <artifactId>google-collections</artifactId>
            <version>1.0</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.25</version>
        </dependency>

3.操作

 //创建永久节点
    @Test
    public void createZnode() throws Exception {
        /*
            错误
            org.apache.curator.framework.imps.CuratorFrameworkImpl - Background operation retry gave up
            org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss
            版本问题
             Curator 存在版本兼容问题。
             Curator 2.x.x-兼容两个zk 3.4.x 和zk 3.5.x,
             Curator 3.x.x-兼容兼容zk 3.5。 我的zookeeper是3.5.8的 curator 版本使用3.3.0的

         */

        //1.定制一个重试策略
        int baseSleepTimeMs = 1000; //重试的间隔时间 单位毫秒
        int xRetrie = 1; //重试的最大次数
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(baseSleepTimeMs, xRetrie);
        //2.获取一个客户端对象
        /*
        connectString  要连接的zookeeper服务器列表
        sessionTimeoutMs  会话的超时时间
        connectionTimeoutMs 链接的超时时间
        RetryPolicy  重试策略对象
          */
        String connectionstr = "192.168.126.131:2181,192.168.126.132:2181,192.168.126.133:2181";
        CuratorFramework client = CuratorFrameworkFactory.newClient(connectionstr, 8000, 8000, retryPolicy);
        //3.开启客户端
        client.start();
        //4.创建节点
//               PERSISTENT(0, false, false, false),  创建永久节点
//                PERSISTENT_SEQUENTIAL(2, false, true, false), 永久序列化节点
//                EPHEMERAL(1, true, false, false),   临时节点
//                EPHEMERAL_SEQUENTIAL(3, true, true, false),  临时序列化节点
//                CONTAINER(4, false, false, true);
        //creatingParentsIfNeeded() 代表可以直接创建父节点
        //withMode 表示节点类型  4种 永久节点 ,临时节点, 永久顺序节点 ,临时顺序节点
        //forPath  第一个参数--path  第二参数 --携带的数据
        client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath("/zookeeperapi", "helloword".getBytes());
        //5.关闭客户端
        client.close();
    }

    //创建临时节点
    @Test
    public void createZnodelinshi() throws Exception {

        //1.定制一个重试策略
        int baseSleepTimeMs = 1000; //重试的间隔时间 单位毫秒
        int xRetrie = 1; //重试的最大次数
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(baseSleepTimeMs, xRetrie);
        //2.获取一个客户端对象
        String connectionstr = "192.168.126.131:2181,192.168.126.132:2181,192.168.126.133:2181";
        CuratorFramework client = CuratorFrameworkFactory.newClient(connectionstr, 8000, 8000, retryPolicy);
        //3.开启客户端
        client.start();
        //4.创建节点
        client.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath("/zookeeperapitmp", "helloword".getBytes());
         //休眠 (临时节点在会话完成时已经消失了就看不见了)
         Thread.sleep(50000);
        //5.关闭客户端
        client.close();
    }

    //修改节点数据
    @Test
    public void updateZnode() throws Exception {

        //1.定制一个重试策略
        int baseSleepTimeMs = 1000; //重试的间隔时间 单位毫秒
        int xRetrie = 1; //重试的最大次数
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(baseSleepTimeMs, xRetrie);
        //2.获取一个客户端对象
        String connectionstr = "192.168.126.131:2181,192.168.126.132:2181,192.168.126.133:2181";
        CuratorFramework client = CuratorFrameworkFactory.newClient(connectionstr, 8000, 8000, retryPolicy);
        //3.开启客户端
        client.start();
        //4.创建节点
        client.setData().forPath("/zookeeperapi", "helloword,nihao".getBytes());
        //5.关闭客户端
        client.close();
    }

    //查询节点数据
    @Test
    public void selectZnode() throws Exception {

        //1.定制一个重试策略
        int baseSleepTimeMs = 1000; //重试的间隔时间 单位毫秒
        int xRetrie = 1; //重试的最大次数
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(baseSleepTimeMs, xRetrie);
        //2.获取一个客户端对象
        String connectionstr = "192.168.126.131:2181,192.168.126.132:2181,192.168.126.133:2181";
        CuratorFramework client = CuratorFrameworkFactory.newClient(connectionstr, 8000, 8000, retryPolicy);
        //3.开启客户端
        client.start();
        //4.创建节点
        byte[] bytes = client.getData().forPath("/zookeeperapi");
        System.out.println(new String(bytes));
        //5.关闭客户端
        client.close();
    }

    //节点的watch机制
    @Test
    public  void  watchZnode() throws Exception {
        //1.定制一个重试策略
        RetryPolicy retryPolicy=new ExponentialBackoffRetry(1000,1);
        //2.获取客户端
        String connectionstr = "192.168.126.131:2181,192.168.126.132:2181,192.168.126.133:2181";
        CuratorFramework client = CuratorFrameworkFactory.newClient(connectionstr, 8000, 8000, retryPolicy);
        //3.启动客户端
        client.start();
        //4.创建一个TreeCache对象 ,指定要监听的对象 第一个参数客户段 第二个参数就是节点路径
        TreeCache treeCache=new TreeCache(client,"/zookeeperapi");
        //自定义一个监听器和处理过程
        treeCache.getListenable().addListener(new TreeCacheListener() {
            @Override
            public void childEvent(CuratorFramework curatorFramework, TreeCacheEvent treeCacheEvent) throws Exception {
                //自定监听器
                ChildData data = treeCacheEvent.getData(); //获取数据
                if(data != null){   //如果不为空就代表事件被触发
                    switch (treeCacheEvent.getType()){
                        case NODE_ADDED :
                            System.out.println("监控到有新增节点");
                            break;
                        case NODE_REMOVED:
                            System.out.println("监控到有节点移除");
                            break;
                        case NODE_UPDATED:
                            System.out.println("监控到有节点更新");
                        default:
                            break;
                    }
                }
            }
        });
        //开始监听
         treeCache.start();
        Thread.sleep(10000000);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

热心市民爱抽烟屁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值