前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Zookeeper系列(7) —— Zookeeper 的 Java API

Zookeeper系列(7) —— Zookeeper 的 Java API

作者头像
求和小熊猫
发布2020-11-25 15:14:29
4810
发布2020-11-25 15:14:29
举报

Zookeeper Java API

初始依赖

在使用 Java API 对 Zookeeper 进行操作是,首先需要引入相关的依赖。

在引入 zookeeper 的相关依赖时,我们需要注意添加的依赖的版本号要与在服务器上部署的 zookeeper 版本相对应。 我们可以在该网址上寻找相对应版本:https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper

代码语言:javascript
复制
<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.6.2</version>
</dependency>

连接 Zookeeper

Step2: 使用 Zookeeper 成功创建一个节点

代码语言:javascript
复制
public class ZKTest {
	public static String serverURL = "192.168.16.130:2181";
	public static int timeout = 30000;
	public ZooKeeper zk;
	private CountDownLatch countDownLatch = new CountDownLatch(1);
    
	@Before
	public void before() throws Exception {
		// 创建一个 zookeeper 的连接实例
		zk = new ZooKeeper(serverURL,timeout, new Watcher() {			
			public void process(WatchedEvent event) {
				System.out.println(event.getState());
				System.out.println(event.getType());
				System.out.println(event.getPath());
			}
		});
		countDownLatch.await();
		System.out.println(zk.getState());
	}
		
	@After
	public void after() throws Exception {
		// 断开连接
		System.out.println(zk.getState());
		zk.close();
	}
}

ZooKeeper 的构造函数 该构造函数包含3个入参 第一个是连接的字符串,改参数包含了连接的ip和端口号 第二个参数是连接时间 第三个参数是设置监听的实现,我们可以通过监听时间获得不同的信息从而采取不同的对策

使用 Java 操作 Zookeeper 的节点

代码语言:javascript
复制
/**
	 * public String create(final String path,byte[] data,List<ACL> acl,CreateMode createMode)
	 * 		throws KeeperException, InterruptedException
	 * @param path    		节点的路径
     * @param data    		节点的初始数据
     * @param acl     		节点的ACL
     * @param createMode	节点的创建模式,可以选择是否创建临时或序列化节
     */
	@Test
	public void test1() throws Exception {
		// 使用 zookeeper 实例创建一个节点
		String s = zk.create("/testzk/znode1", "testzk的第一个节点".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
		System.out.println(s);
	}
	
	
	/**
	 * public byte[] getData(String path, boolean watch, Stat stat) 
	 *		throws KeeperException, InterruptedException
	 * @param path 	节点的路劲
     * @param watch 是否对此节点设置监听
     * @param stat 	节点的状态
	 */
	@Test
	public void test2() throws Exception {
		// 获得节点的数据
		byte[] data = zk.getData("/testzk/znode1", false, null);
		String s = new String(data);
		System.out.println(s);
	}
	
	/**
	 * public List<String> getChildren(String path, boolean watch) 
	 * 		throws KeeperException, InterruptedException
	 * @param path	节点的路劲
     * @param watch	是否对此节点设置监听
	 */
	@Test
	public void test3() throws Exception {
		// 获取节点下的所有子节点
		List<String> child = zk.getChildren("/testzk", false);
		for(String s : child) {
			System.out.println(s);
		}
	}
	
	/**
	 * setData(final String path, byte[] data, int version) 
	 * 		throws KeeperException, InterruptedException
	 * @param path 		节点的路劲
     * @param data 		设置的节点数据
     * @param version	匹配的版本
	 */
	@Test
	public void test4() throws Exception {
		// 修改节点的值
		Stat stat = zk.setData("/testzk/znode1", "znode修改的值".getBytes(), -1);
		System.out.println(stat);
	}
	
	/**
	 * public void delete(final String path, int version) 
	 * 		throws InterruptedException, KeeperException
	 * @param path		要被删除的节点路劲
     * @param version	节点的版本
	 */
	@Test
	public void Test5() throws Exception {
		// 删除节点
		zk.delete("/testzk/znode", -1);
	}
	
	/**
	 * public Stat exists(String path, boolean watch) 
	 * 		throws KeeperException, InterruptedException
	 * @param path		节点的路劲
     * @param watch		是否设置监听
	 */
	@Test
	public void test6() throws Exception {
		// 获得节点的状态
		Stat stat = zk.exists("/testzk/znode", false);
		System.out.println(stat.getCtime());
	}

设置监听与监听的回调事件

设置监听

代码语言:javascript
复制
	@Test
	public void testx() throws Exception {
		zk.getData("/testzk/znode1", true, null);
		zk.setData("/testzk/znode1", "znode修改的值".getBytes(), -1);
	}

获取节点信息的函数 getData 函数包含三个入参 第一个是路径,是指向所获取的节点的信息 第二个是监听,是bool类型的值,表示是否这只监听 第三个是Stat,一般返回的是一个字节数组

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-10-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Zookeeper Java API
    • 初始依赖
      • 连接 Zookeeper
        • 使用 Java 操作 Zookeeper 的节点
          • 设置监听与监听的回调事件
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档