zk java api

本文涉及的产品
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
云原生网关 MSE Higress,422元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: zk java api

1.pom 文件

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.8</version>
        </dependency>
        <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.zk 操作

package com.vince.xq.kafka;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import org.junit.Test;
import java.util.concurrent.CountDownLatch;
public class ZKTest {
    @Test
    public void testZkConnect() throws Exception {
        final CountDownLatch countDownLatch = new CountDownLatch(1);
        ZooKeeper zooKeeper =
                new ZooKeeper("127.0.0.1:2181",
                        4000, new Watcher() {
                    @Override
                    public void process(WatchedEvent event) {
                        if (Event.KeeperState.SyncConnected == event.getState()) {
                            //如果收到了服务端的响应事件,连接成功
                            countDownLatch.countDown();
                        }
                    }
                });
        countDownLatch.await();
        //CONNECTED
        //zooKeeper.create("/CONFIG/timeout", "0".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        zooKeeper.delete("/CONFIG/timeout", -1);
        System.out.println(zooKeeper.getState());
    }
    @Test
    public void testZkCreateNode() throws Exception {
        final CountDownLatch countDownLatch = new CountDownLatch(1);
        ZooKeeper zooKeeper =
                new ZooKeeper("127.0.0.1:2181",
                        4000, new Watcher() {
                    @Override
                    public void process(WatchedEvent event) {
                        if (Event.KeeperState.SyncConnected == event.getState()) {
                            //如果收到了服务端的响应事件,连接成功
                            countDownLatch.countDown();
                        }
                    }
                });
        countDownLatch.await();
        //CONNECTED
        String path = "/watcher";
        String nodePath = zooKeeper.create(path, "123".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        System.out.println(nodePath);
        System.out.println(zooKeeper.getState());
    }
    @Test
    public void testZkDeleteNode() throws Exception {
        final CountDownLatch countDownLatch = new CountDownLatch(1);
        ZooKeeper zooKeeper =
                new ZooKeeper("127.0.0.1:2181",
                        4000, new Watcher() {
                    @Override
                    public void process(WatchedEvent event) {
                        if (Event.KeeperState.SyncConnected == event.getState()) {
                            //如果收到了服务端的响应事件,连接成功
                            countDownLatch.countDown();
                        }
                    }
                });
        countDownLatch.await();
        //CONNECTED
        zooKeeper.delete("/watcher", -1);
        System.out.println(zooKeeper.getState());
    }
    @Test
    public void getZkNodeData() throws Exception {
        final CountDownLatch countDownLatch = new CountDownLatch(1);
        ZooKeeper zooKeeper =
                new ZooKeeper("127.0.0.1:2181",
                        4000, new Watcher() {
                    @Override
                    public void process(WatchedEvent event) {
                        if (Event.KeeperState.SyncConnected == event.getState()) {
                            //如果收到了服务端的响应事件,连接成功
                            countDownLatch.countDown();
                        }
                    }
                });
        countDownLatch.await();
        Stat stat = new Stat();
        // getData的返回值是该节点的数据值,节点的状态信息会赋值给stat对象
        byte[] data = zooKeeper.getData("/CONFIG/timeout", true, stat);
        System.out.println(new String(data));
        System.out.println(stat);
        System.out.println(zooKeeper.getState());
    }
    @Test
    public void getZkConnect() throws Exception {
        CuratorFramework curatorFramework = CuratorFrameworkFactory.
                builder().connectString("127.0.0.1:2181").
                sessionTimeoutMs(4000).retryPolicy(new
                ExponentialBackoffRetry(1000, 3)).
                namespace("").build();
        curatorFramework.start();
        Stat stat = new Stat();
        //查询节点数据
        byte[] bytes = curatorFramework.getData().storingStatIn(stat).forPath("/runoob");
        System.out.println(new String(bytes));
        curatorFramework.close();
    }
    @Test
    public void setData() throws Exception {
        CuratorFramework curatorFramework = CuratorFrameworkFactory.
                builder().connectString("127.0.0.1:2181").
                sessionTimeoutMs(4000).retryPolicy(new
                ExponentialBackoffRetry(1000, 3)).
                namespace("").build();
        curatorFramework.start();
        Stat stat = new Stat();
        //查询节点数据
        curatorFramework.setData().forPath("/watcher", "123".getBytes());
        curatorFramework.close();
    }
}

参考:

https://segmentfault.com/a/1190000012262940


相关文章
|
1月前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
|
1月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
194 100
|
1月前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
217 101
|
1月前
|
并行计算 Java 大数据
Java Stream API:现代数据处理之道
Java Stream API:现代数据处理之道
189 101
|
2月前
|
JSON Java API
【干货满满】分享京东API接口到手价,用Java语言实现
本示例使用 Java 调用京东开放平台商品价格及优惠信息 API,通过商品详情和促销接口获取到手价(含优惠券、满减等),包含签名生成、HTTP 请求及响应解析逻辑,适用于比价工具、电商系统集成等场景。
|
2月前
|
存储 Java API
Java Stream API:现代数据处理之道
Java Stream API:现代数据处理之道
338 188
|
2月前
|
存储 Java API
Java Stream API:现代数据处理之道
Java Stream API:现代数据处理之道
243 92
|
3月前
|
Oracle Java 关系型数据库
掌握Java Stream API:高效集合处理的利器
掌握Java Stream API:高效集合处理的利器
355 80
|
3月前
|
安全 Java API
Java 8 Stream API:高效集合处理的利器
Java 8 Stream API:高效集合处理的利器
242 83
|
1月前
|
安全 Java API
使用 Java 构建强大的 REST API 的四个基本技巧
本文结合探险领域案例,分享Java构建REST API的四大核心策略:统一资源命名、版本控制与自动化文档、安全防护及标准化异常处理,助力开发者打造易用、可维护、安全可靠的稳健API服务。
144 2