专栏首页波波烤鸭Zookeeper04之javaAPI的使用

Zookeeper04之javaAPI的使用

  本文主要介绍下zookeeper的javaAPI的使用,zookeeper的安装操作及命令不清楚的可参考前面文章


Java程序操作Zookeeper

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

主要jar包在主目录下

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

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

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操作还是比较简单的,本文就介绍到这里

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • NoSQL(MongoDB,Hbase,Redis)介绍

      NoSQL,泛指非关系型的数据库,随着互联网的发展传统的关系型数据库面对持续增长的数据处理起来显得越来越力不从心,此时非关系型数据库应运而生。

    用户4919348
  • mybatis教程之原理剖析

      MyBatis是目前非常流行的ORM框架,功能很强大,然而其实现却比较简单、优雅。本文通过代理的方式来看下其实现

    用户4919348
  • Vue教程12(实例生命周期介绍)

      此图为Vue官方给出的生命周期图,可先大概浏览下,如果不懂先不管,继续往下看。

    用户4919348
  • 车联网正在大跨步发展,如果能解决安全问题就可以飞了

    镁客网
  • 什么是高并发架构?

    TPS(每秒事务数):每秒钟可以处理的事务(请求响应),大概的计算公式为:并发数/每秒响应时间=TPS

    kubernetes中文社区
  • Power Pivot智能日期运用——当前初始日期/当前结束日期

    逍遥之
  • Side Window Filtering 论文解读和C++实现

    刚开始看到这篇论文的时候,我就很感兴趣想去复现一把看看效果。这篇论文是今年 CVPR oral 且不是深度学习方向的,其核心贡献点就是:不管原来的滤波器保不保边...

    Ldpe2G
  • 【TEG TALK 5】唐国华|重复的事情一定很无聊吗

    千淘万漉虽辛苦 吹尽狂沙始到金 他给我讲话的时候,我好难和平日一样嘻哈起来,不由自主的正襟危坐,他认真的表情、认真的态度、认真的语言,让我听到那~~么好笑的话...

    TEG云端专业号
  • Qt之FTP上传/下载文件操作

    Qt君
  • React项目配置1(如何管理项目公共js方法)

    本教程总共6篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React项目配置1(如何管理项目公共js方法)---...

    前端人人

扫码关注云+社区

领取腾讯云代金券