九:客服端的命令行操作
(1)启动客户端
zkCli.sh
(1)查看帮助
help
(3)查看当前znode所包含的内容
ls /
(4)创建节点
create /hunterhenshuai 18
(5)创建短暂znode
create -e /itstar hunter
(6)创建带序号znode
create -s /bigdata hunter
(7)创建短暂带序号
create -e -s /bigdata hunter
(8)查看此节点的详细信息
ls2 /
(9)获得节点值监听
get /hunterhenshuai watch
(10)监听路径
ls / watch
(11)修改znode数据
set /hunterhenshuai iiiii
(12)删除节点
delete /hunterhenshuai
(13)递归删除
rmr /delireba
(14)查看节点状态信息
stat /
十:客户端API
1:zookeeper的基本客服端操作(增删改查)
package com.dawn.zk; import java.io.IOException; import java.util.List; 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.Ids; import org.apache.zookeeper.ZooKeeper; import org.apache.zookeeper.data.Stat; import org.junit.Before; import org.junit.Test; /** * @author Dawn * @date 2019年5月17日08:48:03 * @version 1.0 * zookeeper的基本客服端操作 */ public class ZKclient { private String connecting="bigdata11:2181,bigdata12:2181,bigdata13:2181"; private int sessionTimeout=3000;//会话超时时间 3秒 ZooKeeper zkCli=null; //初始化客户端 @Before public void init() throws IOException { zkCli=new ZooKeeper(connecting, sessionTimeout, new Watcher() { //回调监听 @Override public void process(WatchedEvent event) { // TODO Auto-generated method stub System.out.println(event.getPath()+" "+event.getState()+" "+event.getType()); List<String> children; try { children = zkCli.getChildren("/", true); for(String v:children) { System.out.println(v); } } catch (KeeperException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } //2:创建子节点 相当于命令 create /haha more smile @Test public void createNode() throws KeeperException, InterruptedException { /** * CreateMode.PERSISTENT 创建模式。永久性的创建(不加任何参数) * * create -e /itstar hunter 创建临时节点 * create -e -s /bigdata hunter )创建短暂带序号 */ String path = zkCli.create("/xixi", "nb".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); System.out.println(path); } //3:获取子节点 相当于命令: ls / @Test public void getChild() throws KeeperException, InterruptedException { List<String> children = zkCli.getChildren("/", true); for(String v:children) { System.out.println(v); } //长期监听 Thread.sleep(Long.MAX_VALUE); } //4:删除节点 @Test public void rmChildDate() throws InterruptedException, KeeperException { //删除具有给定路径的节点。如果存在这样的节点,并且给定的版本与节点的版本匹配(如果给定的版本为-1, //则与任何节点的版本匹配),则调用将成功。 // byte[] data = zkCli.getData("/bbq", true, null); // System.out.println(new String(data)); zkCli.delete("/haha", -1); } //5:修改数据 @Test public void setDate() throws KeeperException, InterruptedException { zkCli.setData("/dawn", "nb!".getBytes(), -1); } //6:判断节点是否存在 @Test public void testExist() throws KeeperException, InterruptedException { Stat rs = zkCli.exists("/haha", false); System.out.println(rs==null ? "不存在" : "存在"); } }
2:监听数据测试
package com.dawn.zk; import java.io.IOException; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.ZooKeeper; /** * @author Dawn * @date 2019年5月17日09:21:09 * @version 1.0 * 监听数据测试, * 尽管设置了Thread.sleep(Long.MAX_VALUE);。想进行永久监听。结果还是监听一次 */ public class WatchDemo { public static void main(String[] args) throws IOException, KeeperException, InterruptedException { ZooKeeper zkCli = new ZooKeeper("bigdata11:2181,bigdata12:2181,bigdata13:2181", 3000, new Watcher() { //监听回调 @Override public void process(WatchedEvent event) { // TODO Auto-generated method stub } }); byte[] data = zkCli.getData("/dawn", new Watcher() { //监听的具体内容 @Override public void process(WatchedEvent event) { System.out.println("监听路径:"+event.getPath()); System.out.println("监听类型:"+event.getType()); System.out.println("数据被一个陌生人改变了!!"); } }, null); System.out.println(new String(data)); Thread.sleep(Long.MAX_VALUE); } }
3:监听目录
package com.dawn.zk; import java.io.IOException; import java.util.List; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.ZooKeeper; /** * @author Dawn * @date 2019年5月17日09:30:33 * @version 1.0 * 监听目录 * 尽管设置了Thread.sleep(Long.MAX_VALUE);。想进行永久监听。结果还是监听一次 */ public class WatchDemo1 { static List<String> children = null; public static void main(String[] args) throws IOException, KeeperException, InterruptedException { ZooKeeper zkCli = new ZooKeeper("bigdata11:2181,bigdata12:2181,bigdata13:2181", 3000, new Watcher() { //监听回调 @Override public void process(WatchedEvent event) { System.out.println("正在监听中....."); } }); //监听目录 children = zkCli.getChildren("/", new Watcher() { @Override public void process(WatchedEvent event) { System.out.println("监听路径为:" + event.getPath()); System.out.println("监听的类型为:" + event.getType()); System.out.println("数据被2货修改了!!!"); for(String c:children) { System.out.println(c); } } }); Thread.sleep(Long.MAX_VALUE); } }