ZooKeeper 简单实用
Zookeeper
# 服务心跳时间 tickTime=2000 # 投票选举新Leader的初始化时间 initLimit=10 # leader 与 follower心跳检测最大容忍时间,响应超过syncLimit*tickTime,leader认为follwer死掉,从服务器中删除follwer syncLimit=5 # 数据目录 dataDir=F:\\tmp\\zookeeper\\data # 日志目录 dataLgDir=F:\\tmp\\zookeeper\\log # 端口 clientPort=2181
1.创建节点:ZooKeeper节点的类型
| CreateMode.PERSISTENT | 持久节点,该节点客户端断开连接后不会删除 |
| CreateMode.EPHEMERAL | 临时节点,该节点客户端断开后删除 |
| CreateMode.EPHEMERAL_SEQUENTIAL | 临时节点,改节点客户端断开后删除。并将在其名下附加一个单调递增数 |
| CreateMode.PERSISTENT_SEQUENTIAL | 持久节点,该节点客户端断开后不会删除。并将在其名下附加一个单调递增数 |
创建节点事例:
try { // 实例化一个Zookeeper对象,指定三个参数, //url:Zookeeper服务器的地址 //sessionTimeout:会话时常 一般在minSessionTimeout-maxSessionTimeout之间 //watcher: 默认的watcher ZooKeeper z = new ZooKeeper("127.0.0.1:2181",4000,null); try {
//创建root节点,包含数据root data,其访问权限为开放,所有人均可以访问,创建模式持久化节点 z.create("/root", "root data".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL); } catch (KeeperException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
2.删除节点
z.delete("/root", -1);
删除某一节点的时候,使用delete方法即可删除。删除时需要制定版本号如果为-1时则匹配所有的版本.如果匹配不到相应的节点则会抛出异常。
3.设值和获取节点内容
//设置该节点的数据,版本号为-1,如果匹配不到节点则会抛出异常 z.setData("/roog", "hello".getBytes(), -1); //获取器节点数据,并放回stat Stat stat = new Stat(); // 节点:获取节点上保存的数据 // 是否使用默认的watcher,false 为不使用 // stat,表示节点的状态,是一个传出参数,将返回该节点当前的状态信息 byte[] data = z.getData("/root",false, stat);
通过setData方法,将数据保存到节点上,也可以通过getData方法获取该节点数据,一个znode最多能保存1M的数据
4.添加子节点
z.create("/root/child", "child root".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
父节点必须存在,否则抛出异常
5.判断节点是否存在
stat = z.exists("/root/child", false);
if(stat == null){
System.out.println("节点不存在");
}else{
System.out.println("有");
}
Java JavaScript ECMAScript 小严

浙公网安备 33010602011771号