Zookeeper04之javaAPI的使用

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Zookeeper04之javaAPI的使用


Java程序操作Zookeeper

1.创建java项目并导入相关jar包

主要jar包在主目录下

image.png

项目需要的相关依赖的jar包在zookeeper的解压文件的lib目录下就有

image.png将这几个jar包导入项目即可

image.png

maven项目坐标

<dependency>
  <groupId>org.apache.zookeeper</groupId>
  <artifactId>zookeeper</artifactId>
  <version>3.4.6</version>
  <type>pom</type>
</dependency>
<dependency>
  <groupId>com.github.sgroschupf</groupId>
  <artifactId>zkclient</artifactId>
  <version>0.1</version>
</dependency>
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
</dependency>

2.API简单使用

2.1配置Zookeeper对象

  // zookeeper的服务器地址
  private String connectString = "192.168.88.121:2181,192.168.88.122:2181,192.168.88.123:2181";
  // 连接超时时间
  private int sessionTimeout = 2000;
  private ZooKeeper zk = null;
  /**
   * 设置zookeeper对象
   * @throws IOException 
   */
  @Before
  public void setZookeeper() throws IOException {
    zk = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
      /**
       * 事件触发的回调方法
       */
      @Override
      public void process(WatchedEvent event) {
      }
    });
    System.out.println("---"+zk);
  }

常用API操作

/**
 * create 方法参数
 *    第一个参数 路径
 *    第二个参数  值  bytes
 *    第三个参数  对节点的访问控制
 *    第四个参数  节点的类型 短暂  永久  序号        
 * @throws KeeperException
 * @throws InterruptedException
 */
@Test
public void create() throws KeeperException, InterruptedException {
  String path = zk.create("/app3", "123".getBytes(), 
      Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  System.out.println(path);
}
/**
 * 判断节点是否存在
 * @throws InterruptedException 
 * @throws KeeperException 
 */
@Test
public void exist() throws KeeperException, InterruptedException{
  // 设置为 true 会调用 zk中的监听器
  Stat stat = zk.exists("/app1", true);
  if(stat!=null){
    System.out.println("存在。。。。"+stat.getDataLength());
  }else{
    System.out.println("不存在。。。");
  }
}
/**
 * 获取子节点
 * @throws InterruptedException 
 * @throws KeeperException 
 */
@Test
public void getChilren() throws KeeperException, InterruptedException{
  List<String> list = zk.getChildren("/", true);
  for (String s : list) {
    System.out.println(s);
  }
}
/**
 * 获取节点的内容
 * @throws InterruptedException 
 * @throws KeeperException 
 */
@Test
public void getData() throws KeeperException, InterruptedException{
  byte[] b = zk.getData("/app1", false, null );
  System.out.println(new String(b));
}
/**
 * 修改节点内容
 *    version -1 自动维护
 * @throws InterruptedException 
 * @throws KeeperException 
 */
@Test
public void setData() throws KeeperException, InterruptedException{
  Stat s = zk.setData("/app1", "test".getBytes(), -1);
}
/**
 * 删除节点
 *    
 * @throws InterruptedException
 * @throws KeeperException
 */
@Test
public void deleteNode() throws InterruptedException, KeeperException{
  zk.delete("/app1", -1);
}

3.监听器的使用

@Before
public static void setUpBeforeClass() throws Exception {
  zk = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
    /**
     * 监听器
     */
    @Override
    public void process(WatchedEvent event) {
      System.out.println("事件触发...");
    }
  });
}
/**
 * 获取子节点
 * getChildren(path,watch?)监听的事件是:节点下的子节点增减变化事件
 * @throws InterruptedException 
 * @throws KeeperException 
 */
@Test
public void getChilren() throws KeeperException, InterruptedException{
  List<String> list = zk.getChildren("/", new Watcher() {
    @Override
    public void process(WatchedEvent event) {
      // TODO Auto-generated method stub
      System.out.println("监控节点下的子节点被改变..."+event.getPath());
    }
  });
  for (String s : list) {
    System.out.println(s);
  }
  Thread.sleep(Long.MAX_VALUE);
}
/**
 * 获取节点的内容
 * getData(path,watch?)监听的事件是:节点数据变化事件
 * @throws InterruptedException 
 * @throws KeeperException 
 */
@Test
public void getData() throws KeeperException, InterruptedException{
  byte[] b = zk.getData("/app1", new Watcher() {
    @Override
    public void process(WatchedEvent event) {
      System.out.println("--数据改变了--");
    }
  }, null );
  System.out.println(new String(b));
  Thread.sleep(Long.MAX_VALUE);
}

~zookeeper的javaAPI操作还是比较简单的,本文就介绍到这里


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
1月前
|
分布式计算 Java Hadoop
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
62 1
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
2月前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
2月前
|
存储 负载均衡 Dubbo
分布式-Zookeeper(一)
分布式-Zookeeper(一)
|
4月前
|
监控 NoSQL Java
分布式锁实现原理问题之ZooKeeper的观察器(Watcher)特点问题如何解决
分布式锁实现原理问题之ZooKeeper的观察器(Watcher)特点问题如何解决
|
1月前
|
分布式计算 NoSQL Java
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
45 2
|
1月前
|
分布式计算 Hadoop
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
48 1
|
2月前
分布式-Zookeeper-数据订阅
分布式-Zookeeper-数据订阅
|
2月前
|
监控
分布式-Zookeeper-Zab协议
分布式-Zookeeper-Zab协议
|
1月前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
49 0
下一篇
无影云桌面