zookeeper之java客户端使用总结

       现在市面上有很多种zookeeper的java客户端库,我们这儿用的是apache的zookeeper库(毕竟现在zookeeper是在apache里面维护)。

1.明确几个zookeeper里面的概念

     Zookeeper的节点都是存放在内存中的,所以读写速度很快。更新日志被记录到了磁盘中,以便用于恢复数据。在更新内在中节点数之前,会先序列化到磁盘中,然后才会加载到内存中。

     ZooKeeper中的每个节点存储的数据要被原子性的操作。也就是说读操作将获取与节点相关的所有数据,写操作也将替换掉节点的所有数据。另外,每一个节点都拥有自己的ACL(访问控制列表),这个列表规定了用户的权限,即限定了特定用户对目标节点可以执行的操作。

2.引用zookeeper库

       这儿用的是maven管理方式,pom.xml的配置:

<dependencies>
  <dependency>
      <groupId>org.apache.zookeeper</groupId>
      <artifactId>zookeeper</artifactId>
      <version>3.4.3</version>
      <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
         </exclusion>
         <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
            </exclusions>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.2</version>
    </dependency>
</dependencies>

3. zookeeper客户端API的一些简介

  Zookeeper API共包含五个包,分别为:

  (1)org.apache.zookeeper

  (2)org.apache.zookeeper.data

  (3)org.apache.zookeeper.server

  (4)org.apache.zookeeper.server.quorum

  (5)org.apache.zookeeper.server.upgrade

       其中org.apache.zookeeper,包含Zookeeper类,他是我们编程时最常用的类文件。这个类是Zookeeper客户端的主要类文件。如果要使用Zookeeper服务,应用程序首先必须创建一个Zookeeper实例,这时就需要使用此类。一旦客户端和Zookeeper服务建立起了连接,Zookeeper系统将会给次连接会话分配一个ID值,并且客户端将会周期性的向服务器端发送心跳来维持会话连接。只要连接有效,客户端就可以使用Zookeeper API来做相应处理了。

4. zookeeper的java ApI详解

4.1 连接zookeeper服务器

 public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)

       参数说明

      connectString:zookeeper server列表, 以逗号隔开. ZooKeeper对象初始化后, 将从server列表中选择一个server, 并尝试与其建立连接. 如果连接建立失败, 则会从列表的剩余项中选择一个server, 并再次尝试建立连接。

      sessionTimeout:指定连接的超时时间。

      watcher:一个 watcher 实例。

       注意, 创建ZooKeeper对象时, 只要对象完成初始化便立刻返回. 建立连接是以异步的形式进行的, 当连接成功建立后, 会回调watcher的process方法. 如果想要同步建立与server的连接, 需要自己进一步封装。一般我们创建完Zookeeper之后,直接等着其连接好了之后,在watcher的process方法里面让主函数结束等待。

4.2 创建znode(zk节点)

public String create(final String path, byte data[], List<ACL> acl,
CreateMode createMode)

     参数说明

        path:znode的路径,必须是绝对路径。

        data:与znode关联的数据。

        acl:指定权限信息, 如果不想指定权限, 可以传入Ids.OPEN_ACL_UNSAFE。

       createMode:指定znode类型. CreateMode是一个枚举类, 从中选择一个成员传入即可。

createMode的可选的成员类型

PERSISTENT:创建后只要不删就永久存在

EPHEMERAL:会话结束年结点自动被删除,EPHEMERAL结点不允许有子节点

SEQUENTIAL:节点名末尾会自动追加一个10位数的单调递增的序号,同一个节点的所有子节点序号是单调递增的

PERSISTENT_SEQUENTIAL:结合PERSISTENT和SEQUENTIAL

EPHEMERAL_SEQUENTIAL:结合EPHEMERAL和SEQUENTIAL

4.3 删除znode节点

    public void delete(final String path, int version)

      参数说明

            path:znode的路径,必须是绝对路径。

           version:指定要删除的数据的版本, 如果version和真实的版本不同, 删除操作将失败. 指定version为-1则忽略版本检查.

4.4 更新znode节点中的数据

   public Stat setData(final String path, byte data[], int version)

      参数说明

            path:znode的路径,必须是绝对路径。

           data:要设置的到znode的数据,注意数据是直接清空原来的数据,然后写新的数据,且数据的大小不能超过1MB。

           version:指定要更新的数据的版本, 如果version和真实的版本不同, 更新操作将失败. 指定version为-1则忽略版本检查。

4.5 判断znode是否存在

    public Stat exists(final String path, Watcher watcher)

      参数说明

            path:znode的路径,必须是绝对路径。

           watcher:一个 watcher 实例。

         如果该node存在, 则返回该node的状态信息, 否则返回null.

public Stat exists(String path, boolean watch)

        其余和上面都一样,就是boolean的如果为true,表示要用watcher,这时的watcher是初始化zookeeper时候指定的watcher

4.6获取znode节点的子节点列表 

    public List<String> getChildren(final String path, Watcher watcher)

      参数说明

            path:znode的路径,必须是绝对路径。

           watcher:一个 watcher 实例。

     如果有child存在,就返回child,如果没有的话,就会返回null

   public List<String> getChildren(String path, boolean watch)

        其余和上面都一样,就是boolean的如果为true,表示要用watcher,这时的watcher是初始化zookeeper时候指定的watcher

4.7获取znode节点的数据 

     public byte[] getData(final String path, Watcher watcher, Stat stat)

      参数说明

            path:znode的路径,必须是绝对路径。          

           watch:用于指定是否监听path node的删除事件, 以及数据更新事件注意, 不监听path node的创建事件, 因为如果path node不存在, 该方法将抛出KeeperException.NoNodeException异常.

           stat:是个传出参数, getData方法会将path node的状态信息设置到该参数中.

public byte[] getData(String path, boolean watch, Stat stat)

            其余和上面都一样,就是boolean的如果为true,表示要用watcher,这时的watcher是初始化zookeeper时候指定的watcher。


总结:这几个是最常用的API,熟悉了之后,基本95%多的工作都可以通过这个解决,其余的后面的API如果用到可以查文档。




转载于:https://my.oschina.net/u/1540325/blog/611072

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值