ZK Java API

Java客户端

方法名称描述
String create(final String path, byte data[], List acl, CreateMode createMode)创建一个znode节点,参数: 路径、 znode内容,ACL(访问控制列表)、znode创建类型
void delete(final String path, int version)删除一个znode节点,参数: 路径、版本号;如果版本号与znode的版本号不一致,将无法删除,是一种乐观加锁机制;如果将版本号设置为-1,不会去检测版本,直接删除;
Stat exists(final String path, Watcher watcher)判断某个znode节点是否存在参数: 路径、Watcher(监视器);当这个znode节点被改变时,将会触发当前Watcher
Stat exists(String path, boolean watch)判断某个znode节点是否存在参数: 路径、并设置是否监控这个目录节点,这里的 watcher 是在创建 ZooKeeper 实例时指定的 watcher
Stat setData(final String path, byte data[], int version)设置某个znode上的数据参数: 路径、数据、版本号;如果为-1,跳过版本检查
byte[] getData(final String path, Watcher watcher, Stat stat)获取某个znode上的数据参数: 路径、监视器、数据版本等信息
List getChildren(final String path, Watcher watcher)获取某个节点下的所有子节点参数: 路径、监视器;该方法有多个重载
void addAuthInfo(String scheme, byte[] auth)客户端将自己的授权信息提交给服务器,服务器将根据这个授权信息验证客户端的访问权限。
Stat setACL(String path,List acl, int version)给某个目录节点重新设置访问权限,需要注意的是 Zookeeper 中的目录节点权限不具有传递性,父目录节点的权限不能传递给子目录节点。目录节点 ACL 由两部分组成:perms 和 id。Perms 有 ALL、READ、WRITE、CREATE、DELETE、ADMIN 几种 而 id 标识了访问目录节点的身份列表,默认情况下有以下两种:ANYONE_ID_UNSAFE = new Id(“world”, “anyone”) 和 AUTH_IDS = new Id(“auth”, “”)分别表示任何人都可以访问和创建者拥有访问权限。
List getACL(String path,Stat stat)获取某个目录节点的访问权限列表
// 创建一个与服务器的连接 需要(服务端的 ip+端口号)(session过期时间)(Watcher监听注册) 
         ZooKeeper zk = new ZooKeeper("10.154.156.180:2181", 
                3000, new Watcher() { 
                    // 监控所有被触发的事件
                    public void process(WatchedEvent event) {
                        // TODO Auto-generated method stub
                        System.out.println("已经触发了" + event.getType() + "事件!"); 
                    } 
          });

         // 创建一个目录节点
         /**
          * CreateMode:
          *     PERSISTENT (持续的,相对于EPHEMERAL,不会随着client的断开而消失)
          *     PERSISTENT_SEQUENTIAL(持久的且带顺序的)
          *     EPHEMERAL (短暂的,生命周期依赖于client session)
          *     EPHEMERAL_SEQUENTIAL  (短暂的,带顺序的)
          */
         zk.create("/testRootPath", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT); 

         // 创建一个子目录节点
         zk.create("/testRootPath/testChildPathOne", "testChildDataOne".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT); 
         System.out.println(new String(zk.getData("/testRootPath",false,null))); 

         // 取出子目录节点列表
         System.out.println(zk.getChildren("/testRootPath",true));  

         // 创建另外一个子目录节点
         zk.create("/testRootPath/testChildPathTwo", "testChildDataTwo".getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);          
         System.out.println(zk.getChildren("/testRootPath",true));  

        // 修改子目录节点数据
         zk.setData("/testRootPath/testChildPathOne","hahahahaha".getBytes(),-1);            
         byte[] datas = zk.getData("/testRootPath/testChildPathOne", true, null);
         String str = new String(datas,"utf-8");
         System.out.println(str);   

         //删除整个子目录   -1代表version版本号,-1是删除所有版本
         zk.delete("/testRootPath/testChildPathOne", -1);    
         System.out.println(zk.getChildren("/testRootPath",true)); 
         System.out.println(str);

Curator框架

Curator框架提供了一套高级的API, 简化了ZooKeeper的操作。 它增加了很多使用ZooKeeper开发的特性,可以处理ZooKeeper集群复杂的连接管理和重试机制。 这些特性包括:
- 封装ZooKeeper client与ZooKeeper server之间的连接处理;
- 提供了一套Fluent风格的操作API;
- 提供ZooKeeper各种应用场景(recipe, 比如共享锁服务, 集群领导选举机制)的抽象封装.
- 使用Curator创建对象的方法

public static CuratorFramework createWithOptions(String connectionString, RetryPolicy retryPolicy, int connectionTimeoutMs, int sessionTimeoutMs) {

        return CuratorFrameworkFactory.builder().connectString(connectionString)
                .retryPolicy(retryPolicy)
                .connectionTimeoutMs(connectionTimeoutMs)
                .sessionTimeoutMs(sessionTimeoutMs)
                .build();
    }
    //调用代码
    client = createWithOptions("10.154.156.180:2181", new ExponentialBackoffRetry(1000, 3), 1000, 1000);
    client.start();
  • 创建新目录节点
client.create().forPath("/curator", new byte[0]);
client.create().withMode(CreateMode.PERSISTENT).forPath("/curator/childOne", new byte[0]);
//创建zk也可以不使用Fluent风格
public static CuratorFramework createSimple(String connectionString) {        
        ExponentialBackoffRetry retryPolicy = new ExponentialBackoffRetry(1000, 3);        
        return CuratorFrameworkFactory.newClient(connectionString, retryPolicy);
}
-其他方法说明: - create(): 发起一个create操作. 可以组合其他方法 (比如mode 或background) 最后以forPath()方法结尾 -delete(): 发起一个删除操作. 可以组合其他方法(version 或background) 最后以forPath()方法结尾
  • checkExists(): 发起一个检查ZNode 是否存在的操作. 可以组合其他方法(watch 或background) 最后以forPath()方法结尾

  • getData(): 发起一个获取ZNode数据的操作. 可以组合其他方法(watch, background 或get stat) 最后以forPath()方法结尾

  • setData(): 发起一个设置ZNode数据的操作. 可以组合其他方法(version 或background) 最后以forPath()方法结尾

  • getChildren(): 发起一个获取ZNode子节点的操作. 可以组合其他方法(watch, background 或get stat) 最后以forPath()方法结尾

  • inTransaction(): 发起一个ZooKeeper事务. 可以组合create, setData, check, 和/或delete 为一个操作, 然后commit() 提交

摘自:
http://my.oschina.net/liyixiangBlog/blog/381307
http://blog.csdn.net/java2000_wl/article/details/8655146
http://www.cnblogs.com/ggjucheng/p/3370359.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值