6.Apache-Zookeeper JAVA集成

1. 引入Maven

    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.4.13</version>
    </dependency>

2. 简单API使用

除了创建实例外,其余接口调用都分为同步调用和异步调用两种
同步调用会阻塞方法且同步调用会直接返回结果
异步调用不会阻塞方法,没有返回结果,返回结果需要实现回调类来处理
异步调用比同步调用多两个参数

  • AsyncCallback cb 回调函数
  • Object ctx 程序上下文,用户传递使用,zk会把ctx传递给回调函数,不会对其做其他处理

由于同步调用和异步调用的区别较为简单,下方介绍api时进介绍同步调用,可以根据自己的需求来选择异步调用还是同步调用

由于每种方法都有各种重载的情况 我们会介绍所有参数

2.1. 创建客户端实例

ZooKeeper zooKeeper = new ZooKeeper(...);

  • connectString 连接串
  • sessionTimeout 超时时间
  • watcher 连接监听器
  • sessionId
  • sessionPasswd session密码
  • boolean canBeReadOnly 是否可以进入只读模式

在分布式情况下,如果半数以上服务器不可用时,允许客户端进入只读模式,该客户端将只允许进行数据读取不允许数据写入

2.2. 查询操作

很多查询操作都有属性 stat 其为节点的属性存储结构,由于返回值里无法返回Stat,所以这儿的做法是传递一个空对象进去,然后由zookeeper对其进行赋值

watch是一个boolean类型的属性,为true的时候会给他附加一个默认监听器

2.2.1. 查询节点

这里面有个点是 命令里的-R命令 是用递归做的,基本Api是不支持直接出来所有节点的
getChildren 对应命令 ls

  • path 节点路径
  • watch 是否使用默认监听器
  • watcher 监听器
  • stat 节点属性

2.2.2. 查询ACL

getACL

  • path 节点路径
  • stat 节点属性

2.2.2. 查询数据

getData 对应命令 get

  • path 节点路径
  • watch 是否使用默认监听器
  • watcher 监听器
  • stat 节点属性

2.2.3. 查询配置

getConfig

  • path 节点路径
  • watch 是否使用默认监听器
  • watcher 监听器

2.2.4. 查询节点是否存在

exists

  • path 节点路径
  • watch 是否使用默认监听器
  • watcher 监听器

2.3. 新建操作

create 对应命令 create

  • path 节点路径
  • data 数据
  • acl acl权限
  • 创建模式
    • PERSISTENT 持久节点
    • PERSISTENT_SEQUENTIAL 持久顺序节点
    • EPHEMERAL 临时节点
    • EPHEMERAL_SEQUENTIAL 临时顺序节点
    • CONTAINER 容器节点
    • PERSISTENT_WITH_TTL 会过期的持久节点
    • PERSISTENT_SEQUENTIAL_WITH_TTL 会过期的持久顺序节点
  • ttl 过期时间

如果创建模式 不是会过期的,那么ttl将不会有效

2.4. 删除操作

2.4.1. 删除node

delete 对应命令delete

  • path 节点路径
  • version

2.4.2. 删除所有Watch

removeAllWatches

  • path 节点路径
  • watcherType
  • local

2.4.3. 删除Watch

removeWatches

  • opCode
  • path 节点路径
  • watcher
  • watcherType
    • Children
    • Data
    • Any
  • local

2.5. 修改操作

2.5.1. 设置节点属性

setData

  • path 节点路径
  • data 数据
  • version 版本号

2.5.2. 设置ACL

setData

  • path 节点路径
  • acl acl
  • aclVersion 版本号

2.5.3. 设置配置

internalReconfig

  • joiningServers
  • leavingServers
  • newMembers
  • fromConfig
  • stat

2.6. 其他操作

2.6.1. 判断节点是否存在

exists

  • path 节点路径
  • watch 是否使用默认监听
  • watcher 监听器

2.6.2. 同步节点

sync

  • path 节点路径

3. ACL相关

ACL 由Id 和 perms构成

Id 由 scheme 和 id 构成

public class ACL implements Record {
  private int perms;
  private org.apache.zookeeper.data.Id id;
  public ACL() {
  }
  public ACL(int perms,org.apache.zookeeper.data.Id id) {
    this.perms=perms;
    this.id=id;
  }
  ...
}
public class Id implements Record {
  private String scheme;
  private String id;
  public Id() {
  }
  public Id(String scheme,String id) {
    this.scheme=scheme;
    this.id=id;
  }
  ...
}

3.1. Id

内置两种

    public final Id ANYONE_ID_UNSAFE = new Id("world", "anyone");
    public final Id AUTH_IDS = new Id("auth", "");

3.2. perms

权限有以下五种:

  • READ
  • WRITE
  • CREATE
  • DELETE
  • ADMIN
public interface Perms {
    int READ = 1 << 0;

    int WRITE = 1 << 1;

    int CREATE = 1 << 2;

    int DELETE = 1 << 3;

    int ADMIN = 1 << 4;

    int ALL = READ | WRITE | CREATE | DELETE | ADMIN;
}

如果想设置两种或两种以上 那么可以用 |连接

Perms.READ|PERMS.WRITE

4. CLI和API的映射关系

序号CLIAPI
1addauthaddAuthInfo
2closeclose
3configgetConfig
4connect
5createcreate
6deletedelete
7deletealldelete
8delquotadelete
9getgetData
10getAclgetACL
11history
12listquotagetData
13lsgetChildren
14ls2getChildren
15printwatches
16quit
17reconfigreconfigure
18redo cmdno
19removewatchesremoveAllWatches
20rmrdelete
21setsetData
22setAclsetACL
23setquotacreate
24statexists
25syncsync
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值