• 引入依赖
<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操作节点的更多相关文章

  1. zookeeper客户端使用第三方(Curator)封装的Api操作节点

    1.为什么使用Curator? Curator本身是Netflix公司开源的zookeeper客户端: Curator  提供了各种应用场景的实现封装: curator-framework  提供了f ...

  2. ZooKeeper客户端原生API的使用以及ZkClient第三方API的使用

    这两部分内容的介绍主要讲的是节点及节点内容和子节点的操作,并且讲解的节点的事件监听以及ACL授权 ZooKeeper客户端原生API的使用 百度网盘地址: http://pan.baidu.com/s ...

  3. Zookeeper客户端使用(使用原生zookeeper)

    Zookeeper客户端使用 一.使用原生zookeeper 在pom.xml中加入依赖 <dependency> <groupId>org.apache.zookeeper& ...

  4. zookeeper客户端操作

    ZooKeeper客户端 zkCli.sh 节点的增删改查 在 bin 目录下的  zkCli.sh  就是ZooKeeper客户端 ./zkCli.sh -timeout 5000  -server ...

  5. ZooKeeper客户端 zkCli.sh 节点的增删改查

    zkCli.sh 在 bin 目录下的  zkCli.sh  就是ZooKeeper客户端 ./zkCli.sh -timeout 5000  -server 127.0.0.1:2181  客户端与 ...

  6. Zookeeper系列三:Zookeeper客户端的使用(Zookeeper原生API如何进行调用、ZKClient、Curator)和Zookeeper会话

    一.Zookeeper原生API如何进行调用 准备工作: 首先在新建一个maven项目ZK-Demo,然后在pom.xml里面引入zk的依赖 <dependency> <groupI ...

  7. ZooKeeper 原生API操作

    zookeeper客户端和服务器会话的建立是一个异步的过程,也就是说在程序中,程序方法在处理完客户端初始化后立即返回(即程序继续往下执行代码,这样,在大多数情况下并没有真正的构建好一个可用会话,在会话 ...

  8. 原生js操作Dom节点:CRUD

    知识点,依然会遗忘.我在思考到底是什么原因.想到研究生考试准备的那段岁月,想到知识体系的建立,知识体系分为正向知识体系和逆向知识体系:正向知识体系可以理解为教科书目录,逆向知识体系可以理解考试真题. ...

  9. zookeeper操作节点代码

    package cn.hbaf.zookeeper_api; import org.apache.curator.RetryPolicy; import org.apache.curator.fram ...

随机推荐

  1. leetcode645

    vector<int> findErrorNums(vector<int>& nums) { ; int S[N]; int n = nums.size(); ; i ...

  2. 关于使用字库-雅黑字体(msyh.ttf )显示中文的一些。。。

    开发中有关程序在使用字库 雅黑字体的 的时候 vs下一开始没有显示出中文来,都是乱码. 在android下使用该字体库的时候同样也没有显示出中文,后来搜搜了原因,得知编码必须是UTF-8 也就是使用字 ...

  3. ssh框架搭建实例代码教程步骤

    http://blog.csdn.net/u010539352/article/details/49255729

  4. session和cookie个字消除的方法

    session消除的方法就是: session_destroy(); cookie消除的方法就是setcookie()函数的时间设为当前时间即可 if(isset($_COOKIE['adminId' ...

  5. unity3d 5.6参考手册

    http://www.vfkjsd.cn/unity3d/Manual/index.html http://www.vfkjsd.cn/unity/unity3d.html

  6. Win32编程中如何处理控制台消息

    这篇文章讨论如何处理所有的控制台消息. 第一步,首先要安装一个事件钩子,也就是说要建立一个回调函数.调用Win32 API,原型如下: BOOL SetConsoleCtrlHandler(PHAND ...

  7. ASCII\UNICODE编码的区别

    前几天,Google给我Hotmail邮箱发了封确认信.我看不懂,不是因为我英文不行,而是"???? ????? ??? ????"的内容让我不知所措.有好多程序员处理不好编码问题 ...

  8. Luogu 4323 [JSOI2016]独特的树叶

    新技能get 树哈希,考虑到两棵树相同的条件,把每一个结点的哈希值和树的siz写进哈希值里去. 做出A树每一个结点为根时的树的哈希值丢进set中,然后暴力枚举B树中度数为1的点,求出删掉这个点之后的哈 ...

  9. CF 1025C Plasticine zebra

    昨晚忘记判只有一个字符的情况fst了呜呜呜 挺有趣的题,昨晚连刚带猜弄出结论 考虑答案的取值,最优答案可能是一个后缀,或者是一个前缀,或者是一个后缀加上前缀 那么翻转之后最优答案的可选值就有了1的前缀 ...

  10. python--tkinter桌面编程开发--记事本

    什么是TK\Tkinter Tkinter是连接Python和TK图形库的一个纽带(接口) Hello Tkinter from tkinter import * root=Tk() #tk类的一个实 ...