<从PAXOS到ZOOKEEPER分布式一致性原理与实践>读书笔记-第5章zookeeper使用
来源:互联网 发布:量子工作室 知乎 编辑:程序博客网 时间:2024/05/16 17:02
本文属于分布式系统学习笔记系列,上篇文章整理了zookeeper安装,本文继续整理第5章zookeeper使用,只做简单演示。
一 使用客户端脚本zkCli.sh
执行./zkCli.sh
出现以下信息表示连接成功。
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]
[zk: localhost:2181(CONNECTED) 0]
以上是默认连接本机地址,如果是希望连接其它指定的zookeeper服务器。
zkCli.sh -server ip:port
1.1 创建
create [-s] [-e] path data acl
-s -e分别代表顺序、临时节点,不用默认的是永久节点。
acl表示访问权限,默认是不做任何权限控制。
1.2 获取
ls是列出指定节点的所有子节点。
用法: ls path [watch]
get 获取指定节点的数据。
用法: get path [watch]
1.3 更新
set 更新指定节点的数据内容。
用法:set path data [version]
version表示节点数据是由版本的。
1.4 删除
delete 删除指定节点
用法:delete path [version]
下面是一个简单演示。
二 使用java客户端操作
书上介绍了比较多的方式,这里只筛选一小部分基于zkClient实现。
首先在maven里面引入依赖配置:
<dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency><dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.3</version> </dependency>创建会话
private void initZk() {String zkServers = "192.168.190.36:2181";String expireTime ="60000";try {if(zk!=null){try {zk.close();} catch (InterruptedException e1) {log.error(e1.getMessage(), e1);}}zk = new ZooKeeper(zkServers, Integer.parseInt(expireTime), new Watcher() {@Overridepublic void process(WatchedEvent event) {log.info(event.toString());}});}catch (NumberFormatException e) {log.error(e.getMessage(), e);}catch (IOException e) {log.error(e.getMessage(), e);}}
zookeeper操作节点相关代码
public boolean exists(String path) {Stat stat = null;try {stat = zk.exists(path, false);}catch (KeeperException e) {log.error(e.getMessage(), e);if (e.code() == KeeperException.Code.SESSIONEXPIRED) {initZk();return exists(path);}}catch (InterruptedException e) {log.error(e.getMessage(), e);}return stat != null;}public boolean createNewFile(String path) {boolean succuess = false;String parentPath = path.substring(0, path.lastIndexOf('/'));if (!"/".equals(parentPath)&&!"".equals(parentPath)) {if (!exists(parentPath)) {createNewFile(parentPath);}}try {zk.create(path, null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);succuess = true;}catch (KeeperException e) {if (e.code() == KeeperException.Code.NODEEXISTS) {return false;}if (e.code() == KeeperException.Code.SESSIONEXPIRED||e.code()==KeeperException.Code.CONNECTIONLOSS) {initZk();return createNewFile(path);}log.error(e.getMessage(), e);}catch (InterruptedException e) {log.error(e.getMessage(), e);}return succuess;}//设置对应znode下的数据 , -1表示匹配所有版本 public boolean setFileData(String path,byte[] data) { boolean succuess = false; try {zk.setData(path, data, -1);} catch (KeeperException e) {if (e.code() == KeeperException.Code.SESSIONEXPIRED) {initZk();return setFileData(path,data);}log.error(e.getMessage(), e);} catch (InterruptedException e) {log.error(e.getMessage(), e);} return succuess; }测试demo
public class ZKTest {public static void main(String[] args) {// TODO Auto-generated method stubZookeeperOperator oper = new ZookeeperOperator();oper.createNewFile("/zktest/a");oper.setFileData("/zktest/a", "1".getBytes());boolean res =oper.exists("/zktest/a");System.out.println(res);}}本机输出:
我们看下服务器的过程:参见下面的截图,红线之上是java程序运行之前,红线后是java程序运行之后。
可见确实能方便用java来操作zookeeper的结点。
下面是书上的listener例子
import org.I0Itec.zkclient.IZkDataListener;import org.I0Itec.zkclient.ZkClient;public class ZKTest {public static void main(String[] args) throws InterruptedException {// TODO Auto-generated method stubZkClient client = new ZkClient("192.168.190.36:2181",50000);String path ="/zktest/a";client.writeData(path, "2");client.subscribeDataChanges(path, new IZkDataListener(){@Overridepublic void handleDataChange(String dataPath, Object data)throws Exception {System.out.println("node"+dataPath+"chaged,new data:"+data);}@Overridepublic void handleDataDeleted(String dataPath) throws Exception {System.out.println("node"+dataPath+"deleted");}});System.out.println( client.readData(path) );client.writeData(path, "4");System.out.println( "begin sleep" ); Thread.sleep(20000); System.out.println( "over" );}}
书上作者还介绍了另一种客户端curator,这里不多介绍。
总结:
本文简单总结第5章的zookeeper使用,下一篇是结合第6章的典型zookeeper场景来学习。
0 0
- <从PAXOS到ZOOKEEPER分布式一致性原理与实践>读书笔记-第5章zookeeper使用
- <从PAXOS到ZOOKEEPER分布式一致性原理与实践>读书笔记-第5章zookeeper安装
- <从PAXOS到ZOOKEEPER分布式一致性原理与实践>读书笔记-zookeeper分布式锁
- <从PAXOS到ZOOKEEPER分布式一致性原理与实践>读书笔记-zookeeper全局唯一id生成
- <从PAXOS到ZOOKEEPER分布式一致性原理与实践>读书笔记-paxos算法
- 从PAXOS到Zookeeper分布式一致性原理与实践
- 从Paxos到Zookeeper分布式一致性原理与实践 -笔记
- 《从PAXOS到ZOOKEEPER分布式一致性原理与实践》pdf
- 书籍-从Paxos到Zookeeper分布式一致性原理与实践
- 《从Paxos到zookeeper分布式一致性原理与实践》笔记
- <从PAXOS到ZOOKEEPER分布式一致性原理与实践>读书笔记-ZAB协议
- 读《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之Zookeeper介绍
- 从PAXOS到ZOOKEEPER分布式一致性原理与实践--Paxos算法
- <从PAXOS到ZOOKEEPER分布式一致性原理与实践>读书笔记-两阶段提交与三阶段提交
- 2016书单总结--从Paxos到Zookeeper分布式一致性原理与实践--原理篇
- 读《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之数据与存储
- 读《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之系统模型
- 读《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之通信协议
- ScrollView隐藏滚动条
- Android开发Message源码分析【享元模式|对象池】
- vs2013编译错误代码集锦
- 内核中断子系统框架
- ksoftirqd内核线程是如何补充实现软中断功能的
- <从PAXOS到ZOOKEEPER分布式一致性原理与实践>读书笔记-第5章zookeeper使用
- ORACLE 与Navicat
- 打印杨辉三角形
- 缓存穿透与缓存雪崩
- 关于Drawable资源加载的相关问题
- 【CVPR 2016】faster r-cnn features for instance search 笔记
- Web MVC简介
- 二维数组的查找
- sqlmap payload简单分析(B E T U S)