zookeeper客户端使用原生JavaApi操作节点
- 引入依赖
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.8</version>
</dependency>
- 创建会话
package com.karat.cn.zookeeper.javaApi; import java.io.IOException;
import java.util.concurrent.CountDownLatch; import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper; /**
* 创建会话(连接zookeeper)
* @author 开发
*
*/
public class CreateSessionDemo { private final static String CONNECTSTRING="47.107.121.215:2181"; private static CountDownLatch countDownLatch=new CountDownLatch(1); public static void main(String []args) throws IOException, InterruptedException{
ZooKeeper zooKeeper=new ZooKeeper(CONNECTSTRING, 5000,new Watcher() {
@Override
public void process(WatchedEvent event) {
//如果当前的连接状态是连接成功的,那么通过计数器去控制
if(event.getState()==Event.KeeperState.SyncConnected){
countDownLatch.countDown();
System.out.println(event.getState());
}
}
});
countDownLatch.await();
System.out.println(zooKeeper.getState());
}
}
- 节点的操作
package com.karat.cn.zookeeper.javaApi; import java.io.IOException;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit; import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat; /**
* java的api对节点的操作
* @author 开发
*
*/
public class CreateDodeDemo implements Watcher{ private final static String CONNECTSTRING="47.107.121.215:2181"; private static CountDownLatch countDownLatch=new CountDownLatch(1); private static ZooKeeper zooKeeper; private static Stat stat=new Stat(); public static void main(String []args) throws IOException, InterruptedException, KeeperException{
/*zooKeeper=new ZooKeeper(CONNECTSTRING, 5000,new Watcher() {
@Override
public void process(WatchedEvent event) {
//如果当前的连接状态是连接成功的,那么通过计数器去控制
if(event.getState()==Event.KeeperState.SyncConnected){
if(Event.EventType.None==event.getType()&&null==event.getPath()){
countDownLatch.countDown();
System.out.println(event.getState()+"->"+event.getType());
}else if(event.getType()== Event.EventType.NodeDataChanged){//数据变更触发路径
try {
System.out.println("数据变更触发路径:"+event.getPath()+"->改变后的值:"+
zooKeeper.getData(event.getPath(),true,stat));
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else if(event.getType()== Event.EventType.NodeChildrenChanged){//子节点的数据变化会触发
try {
System.out.println("子节点数据变更路径:"+event.getPath()+"->节点的值:"+
zooKeeper.getData(event.getPath(),true,stat));
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else if(event.getType()== Event.EventType.NodeCreated){//创建子节点的时候会触发
try {
System.out.println("节点创建路径:"+event.getPath()+"->节点的值:"+
zooKeeper.getData(event.getPath(),true,stat));
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else if(event.getType()== Event.EventType.NodeDeleted){//子节点删除会触发
System.out.println("节点删除路径:"+event.getPath());
}
System.out.println(event.getType());
}
}
});*/
zooKeeper=new ZooKeeper(CONNECTSTRING, 5000,new CreateDodeDemo());//上面代码改成这一行代码 countDownLatch.await();
System.out.println(zooKeeper.getState()); //连接成功创建节点
String result=zooKeeper.create("/app","app节点创建".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
//注册
zooKeeper.getData("/app", true, stat);
System.out.println("创建成功->"+result);
//修改数据
zooKeeper.setData("/app", "修改第一次".getBytes(),-1);
//睡眠2秒
Thread.sleep(2000);
//修改数据
zooKeeper.setData("/app", "修改第二次".getBytes(),-1);
//睡眠2秒
Thread.sleep(2000);
//删除
//zooKeeper.delete("/app", -1);
//睡眠2秒
//Thread.sleep(2000);
//创建节点和子节点(临时节点下不能挂子节点)
String path="/node"; zooKeeper.create(path, "节点node".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
TimeUnit.SECONDS.sleep(1); Stat stat=zooKeeper.exists(path+"/app",true);
if(stat==null){//表示节点不存在
zooKeeper.create(path+"/app","node子节点".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
TimeUnit.SECONDS.sleep(1);
}
//修改子路径
zooKeeper.setData(path+"/app","修改后的".getBytes(),-1);
TimeUnit.SECONDS.sleep(1); //获取指定节点下的子节点
List<String> list=zooKeeper.getChildren("/node", true);//第二个参数表示获取是否监控
System.out.println(list); } /**
* 实现接口Watcher中的process抽象方法
*/
public void process(WatchedEvent watchedEvent) {
//如果当前的连接状态是连接成功的,那么通过计数器去控制
if(watchedEvent.getState()==Event.KeeperState.SyncConnected){
if(Event.EventType.None==watchedEvent.getType()&&null==watchedEvent.getPath()){
countDownLatch.countDown();
System.out.println(watchedEvent.getState()+"-->"+watchedEvent.getType());
}else if(watchedEvent.getType()== Event.EventType.NodeDataChanged){
try {
System.out.println("数据变更触发路径:"+watchedEvent.getPath()+"->改变后的值:"+
zooKeeper.getData(watchedEvent.getPath(),true,stat));
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else if(watchedEvent.getType()== Event.EventType.NodeChildrenChanged){//子节点的数据变化会触发
try {
System.out.println("子节点数据变更路径:"+watchedEvent.getPath()+"->节点的值:"+
zooKeeper.getData(watchedEvent.getPath(),true,stat));
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else if(watchedEvent.getType()== Event.EventType.NodeCreated){//创建子节点的时候会触发
try {
System.out.println("节点创建路径:"+watchedEvent.getPath()+"->节点的值:"+
zooKeeper.getData(watchedEvent.getPath(),true,stat));
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else if(watchedEvent.getType()== Event.EventType.NodeDeleted){//子节点删除会触发
System.out.println("节点删除路径:"+watchedEvent.getPath());
}
System.out.println(watchedEvent.getType());
} }
}
- 权限控制模式
schema:授权对象
ip : 192.168.1.1
Digest : username:password
world : 开放式的权限控制模式,数据节点的访问权限对所有用户开放。 world:anyone
super :超级用户,可以对zookeeper上的数据节点进行操作
- 连接状态
KeeperStat.Expired 在一定时间内客户端没有收到服务器的通知, 则认为当前的会话已经过期了。
KeeperStat.Disconnected 断开连接的状态
KeeperStat.SyncConnected 客户端和服务器端在某一个节点上建立连接,并且完成一次version、zxid同步
KeeperStat.authFailed 授权失败
- 事件类型
NodeCreated 当节点被创建的时候,触发
NodeChildrenChanged 表示子节点被创建、被删除、子节点数据发生变化
NodeDataChanged 节点数据发生变化
NodeDeleted 节点被删除
None 客户端和服务器端连接状态发生变化的时候,事件类型就是None
zookeeper客户端使用原生JavaApi操作节点的更多相关文章
- zookeeper客户端使用第三方(Curator)封装的Api操作节点
1.为什么使用Curator? Curator本身是Netflix公司开源的zookeeper客户端: Curator 提供了各种应用场景的实现封装: curator-framework 提供了f ...
- ZooKeeper客户端原生API的使用以及ZkClient第三方API的使用
这两部分内容的介绍主要讲的是节点及节点内容和子节点的操作,并且讲解的节点的事件监听以及ACL授权 ZooKeeper客户端原生API的使用 百度网盘地址: http://pan.baidu.com/s ...
- Zookeeper客户端使用(使用原生zookeeper)
Zookeeper客户端使用 一.使用原生zookeeper 在pom.xml中加入依赖 <dependency> <groupId>org.apache.zookeeper& ...
- zookeeper客户端操作
ZooKeeper客户端 zkCli.sh 节点的增删改查 在 bin 目录下的 zkCli.sh 就是ZooKeeper客户端 ./zkCli.sh -timeout 5000 -server ...
- ZooKeeper客户端 zkCli.sh 节点的增删改查
zkCli.sh 在 bin 目录下的 zkCli.sh 就是ZooKeeper客户端 ./zkCli.sh -timeout 5000 -server 127.0.0.1:2181 客户端与 ...
- Zookeeper系列三:Zookeeper客户端的使用(Zookeeper原生API如何进行调用、ZKClient、Curator)和Zookeeper会话
一.Zookeeper原生API如何进行调用 准备工作: 首先在新建一个maven项目ZK-Demo,然后在pom.xml里面引入zk的依赖 <dependency> <groupI ...
- ZooKeeper 原生API操作
zookeeper客户端和服务器会话的建立是一个异步的过程,也就是说在程序中,程序方法在处理完客户端初始化后立即返回(即程序继续往下执行代码,这样,在大多数情况下并没有真正的构建好一个可用会话,在会话 ...
- 原生js操作Dom节点:CRUD
知识点,依然会遗忘.我在思考到底是什么原因.想到研究生考试准备的那段岁月,想到知识体系的建立,知识体系分为正向知识体系和逆向知识体系:正向知识体系可以理解为教科书目录,逆向知识体系可以理解考试真题. ...
- zookeeper操作节点代码
package cn.hbaf.zookeeper_api; import org.apache.curator.RetryPolicy; import org.apache.curator.fram ...
随机推荐
- Android 4学习(4):概述 - Using Resources
参考:<Professional Android 4 Application Development> Andorid中的资源包括用户自定义资源和系统自带资源,这两种资源既可以在代码中使用 ...
- 关于更新pip的心得
如果pip install --upgrade pip 删除了自己,但是无法安装新的自己. 那么下载最新的pip,解压 1.在命令窗口输入 python(前提条件已经在系统路径) setup.py ...
- Ubuntu16.04下同时安装Anaconda2与Anaconda3
转自:http://blog.csdn.net/juezhanangle/article/details/78922888 由于编程时同时需要有python2/3的环境和大量的依赖包,本文的思路是先根 ...
- Shell编程进阶 1.4 shell自定义变量
变量 系统自带变量 echo $PATH $HOME $PWD 自定义变量 # a= # echo $a1 # b= # echo $b2 写与用户交互的脚本 vim .sh #!/bin/bash ...
- Ok6410挂载NFS
虚拟机: apt-get install portmap apt-get install nfs-kernel-server mkdir /nfs/root/mNFS chmod 777 /nf ...
- Hive UDF开发 第一个例子
package udf; import org.apache.hadoop.hive.ql.exec.UDF; public class helloudf extends UDF{ public St ...
- docker学习(2)基本命令
原文地址:http://blog.csdn.net/we_shell/article/details/38368137 1. 查看docker信息(version.info) # 查看docker版本 ...
- arp绑定
Windows xp 在CMD中执行 arp -s ip mac 例如 arp -s 192.168.2.101 40-5f-c2-c1-97-fb Windwos 7 在 Windows 7/Vis ...
- idea中解决Error:java: Compilation failed: internal java compiler error的问题
项目中,使用gradle做项目构建,当我们想更改JDK的版本时,报以下错误: Information:Using javac 1.8.0_111 to compile java sourcesInfo ...
- [译]我们应该在HTML文档中何处放script标签
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...