一、前提

  jar包:zookeeper-3.4.9.jar,slf4j-api-1.6.1.jar,slf4j-log4j12-1.6.1.jar,log4j-1.2.15.jar

二、Demo

package com.xbq.zookeeper;

import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List; import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.ACL;
import org.apache.zookeeper.data.Id;
import org.apache.zookeeper.server.auth.DigestAuthenticationProvider; /**
* @ClassName: ZookeeperDemo
* @Description: TODO zookeeper测试
* @author xbq
* @version 1.0
* @date 2017-3-10 下午5:05:16
*/
public class ZookeeperDemo { private static final int SESSION_TIMEOUT = 3000; public static void main(String[] args) {
     Zookeeper zooKeeper = null;
try {
zooKeeper = new ZooKeeper("192.168.242.128:2183", SESSION_TIMEOUT, new Watcher() {
@Override
public void process(WatchedEvent event) {
System.out.println("触发事件:" + event.getType());
}
});
String path = "/node_xbq";
String data = "TestxbqCoder"; create(zooKeeper, path, data); // update(zooKeeper, path, data); // delete(zooKeeper, path); // aclOper(zooKeeper, path, data); // aclOper2(zooKeeper, path, data); // doWatch(zooKeeper, path, data); } catch (Exception e) {
e.printStackTrace();
} finally {
       if(zooKeeper ! = null){
          try{
            zooKeeper.close();
          }catch(Exception e){
          }
       }
}
} /**
* @Title: create
* @Description: TODO 增加操作
* @param zooKeeper
* @param path
* @param data
* @throws KeeperException
* @throws InterruptedException
* @return: void
*/
public static void create(ZooKeeper zooKeeper, String path, String data) throws KeeperException, InterruptedException{
if(zooKeeper.exists(path, false) == null){ // 如果不存在节点,就新建
// 第三个参数是 权限,第四个参数 代表持久节点
       // 权限分类:OPEN_ACL_UNSAFE:对所有用户开放 READ_ACL_UNSAFE:只读 CREATOR_ALL_ACL: 创建者可以做任何操作
zooKeeper.create(path, data.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
System.out.println(new String(zooKeeper.getData(path, true, null)));
} /**
* @Title: update
* @Description: TODO 修改操作
* @param zooKeeper
* @return: void
* @throws InterruptedException
* @throws KeeperException
*/
public static void update(ZooKeeper zooKeeper, String path, String data) throws KeeperException, InterruptedException {
zooKeeper.setData(path, data.getBytes(), -1); // -1标识任何版本号 都可以
System.out.println(new String(zooKeeper.getData(path, true, null)));
} /**
* @Title: delete
* @Description: TODO 删除
* @param zooKeeper
* @param path
* @throws KeeperException
* @throws InterruptedException
* @return: void
*/
public static void delete(ZooKeeper zooKeeper, String path) throws KeeperException, InterruptedException{
if(zooKeeper.exists(path, false) != null){
zooKeeper.delete(path, -1);
}
if(zooKeeper.exists(path, false) != null){
System.out.println(new String(zooKeeper.getData(path, true, null)));
}
} /**
* @Title: aclOper
* @Description: TODO 权限测试 先创建一个只读权限节点,然后更新该节点
* @param zooKeeper
* @param path
* @param data
* @throws KeeperException
* @throws InterruptedException
* @return: void
*/
public static void aclOper(ZooKeeper zooKeeper, String path, String data) throws KeeperException, InterruptedException{
// 首先创建一个只读的节点。第三个参数 代表只读权限
zooKeeper.create(path, data.getBytes(), Ids.READ_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println(new String(zooKeeper.getData(path, true, null)));
// 测试更新节点,因为增加的是 只读的,所以 应该是不可以修改的。发现报错:org.apache.zookeeper.KeeperException$NoAuthException: KeeperErrorCode = NoAuth for /node_xbq
zooKeeper.setData(path, "testRead_ACL".getBytes(), -1);
} /**
* @Title: aclOper2
* @Description: TODO 自定义权限验证
   * 自定义schema权限类型:digest,world,auth,ip,这里用 digest举例
* @param zooKeeper
* @param path
* @param data
* @throws KeeperException
* @throws InterruptedException
* @throws NoSuchAlgorithmException
* @return: void
*/
public static void aclOper2(ZooKeeper zooKeeper, String path, String data) throws KeeperException, InterruptedException, NoSuchAlgorithmException{
// 第一个参数是 所有的权限,第二个参数是 通过 用户名和密码 验证
ACL acl = new ACL(ZooDefs.Perms.ALL, new Id("digest", DigestAuthenticationProvider.generateDigest("root:root")));
List<ACL> acls = new ArrayList<ACL>();
acls.add(acl); if(zooKeeper.exists(path, false) == null){
zooKeeper.create(path, data.getBytes(), acls, CreateMode.PERSISTENT);
} zooKeeper.addAuthInfo("digest", "root:root".getBytes()); // 通过下面的方式 是可以取到值的,因为 加了 用户名和 密码 验证 ,需要 加上 zooKeeper.addAuthInfo("digest", "root:root".getBytes());
System.out.println(new String(zooKeeper.getData(path, true, null)));
} /**
* @Title: doWatch
* @Description: TODO 监听
* @param zooKeeper
* @param path
* @param data
* @throws KeeperException
* @throws InterruptedException
* @return: void
*/
public static void doWatch(ZooKeeper zooKeeper, String path, String data) throws KeeperException, InterruptedException{
if(zooKeeper.exists(path, false) == null){
zooKeeper.create(path, data.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
// 监听 path节点
zooKeeper.getData(path, new Watcher() {
@Override
public void process(WatchedEvent event) {
System.out.println("触发了节点变更事件:" + event.getType());
}
}, null);
// 用更新操作触发 监听事件
zooKeeper.setData(path, "updateTest".getBytes(), -1);
}
}

三、源码下载

  http://git.oschina.net/xbq168/Zookeeper-Demo

Zookeeper(三)-- JAVA原生API的更多相关文章

  1. Zookeeper的java客户端API使用方法(五)

    前面几篇博文,我们简单的介绍了一下zookeeper,如何安装zookeeper集群,以及如何使用命令行等.这篇博文我们重点来看下Zookeeper的java客户端API使用方式. 创建会话 客户端可 ...

  2. curator框架的使用以及实现分布式锁等应用与zkclient操作zookeeper,简化复杂原生API

    打开zookeeper集群 先体会一下原生API有多麻烦(可略过): //地址 static final String ADDR = "192.168.171.128:2181,192.16 ...

  3. zookeeper的Java端API应用

    1. 基本使用 org.apache.zookeeper.Zookeeper是客户端入口主类,负责建立与server的会话.它提供了表1所示几类主要方法: 功能 描述 create 在本地目录树中创建 ...

  4. Zookeeper系列2 原生API 以及核心特性watcher

    原生API 增删改查询 public class ZkBaseTest { static final String CONNECT_ADDR = "192.168.0.120"; ...

  5. zookeeper的Java客户端API

    zookeeper作为一个分布式服务框架,主要用来解决分布式数据一致性问题,对多种语言提供了API.这里主要记录下JAVA客户端API的使用. 1.创建会话 客户端可以通过创建一个ZooKeeper实 ...

  6. 【代码笔记】Java常识性基础补充(三)——Java的API及Object类、正则表达式、getTime()方法、DateFormat类、Calendar类

    1.0 Java 的API(API: Application(应用) Programming(程序) Interface(接口)) 2.0 Java API就是JDK中提供给我们使用的类,这些类将底层 ...

  7. Java原生API操作XML

    使用Java操作XML的开源框架比较多,如著名的Dom4J.JDOM等,但个人认为不管你用那个框架都要对JDK原生的API有所了解才能更得心应手的应用.本篇就来简单了解下原生的XML API. JAV ...

  8. [转载] ZooKeeper的Java客户端API

    转载自 http://www.cnblogs.com/ggjucheng/p/3370359.html http://zookeeper.apache.org/doc/trunk/javaExampl ...

  9. 六:ZooKeeper的java客户端api的使用

    一:客户端链接测试 package com.yeepay.sxf.createConnection; import java.io.IOException; import org.apache.zoo ...

随机推荐

  1. 用C#写一个多进程监控自动关机工具

    因为据说某server开着就很贵,所以我们跑完测试的job后就要赶紧关机才行,但是测试的job要跑很久,过程中又不需要干什么,所以就得有个守家的,有时候会走很晚.如果有一个自动化关机的工具就好了,当指 ...

  2. python pip 升级

      首先安装python,在百度中搜索python,进入python官网.点击download,选择电脑对应的系统进行下载,此处以windows系统的python 3.5.1进行介绍,点击即可下载. ...

  3. 一款基于jquery和css3的响应式二级导航菜单

    今天给大家分享一款基于jquery和css3的响应式二级导航菜单,这款导航是传统的基于顶部,鼠标经过的时候显示二级导航,还采用了当前流行的响应式设计.效果图如下: 在线预览   源码下载 实现的代码. ...

  4. win10系统中UserManager 总是被禁用怎么解决?

    RT,也就是提示win10开始菜单和cortana无法工作.升级win10后一直被这个问题困扰,论坛也见有人发帖求助这类问题,百度了方法打开任务管理器进入服务更改User Manager启动类型为自动 ...

  5. [Django学习]入门

    1. 搭建开发环境 安装django 建议安装1.8.2版本,这是一个稳定性高.使用广.文档多的版本 pip install django==1.8.2 查看版本:进入python shell,运行如 ...

  6. datanode启动失败

    当我动态加入一个hadoop从节点的之后,出现了一个问题: [root@hadoop current]# hadoop-daemon.sh start datanode starting datano ...

  7. TextBox控件的DataBindings属性

    DataBindings属性是很多控件都有的属性,作用有2方面.一方面是用于与数据库的数据进行绑定,进行数据显示.另一方面用于与控件或类的对象进行数据绑定.这里主要关注后者.主要用法是将某个对象的某个 ...

  8. Ajax-ajax实例2-根据邮政编码获取地区信息

    项目结构 运行效果: 数据库: /* SQLyog Ultimate v12.09 (64 bit) MySQL - 5.5.53 : Database - ajaxexample_2 ******* ...

  9. PHP7新特性的介绍

    关于PHP 20年的发展历史: 迄今为止最流行的WEB开发语言: 超过82%的网站都会使用PHP作为他们的服务端开发语言: 新特性介绍 PHP NG – Zend Engine 3 抽象语法树 64位 ...

  10. kettle的报错解决机制

    在kettle执行的过程中,如果遇到错误,kettle会停止运行.在某些时候,并不希望kettle停止运行,这时候可以使用错误处理(Step Error Handling).错误处理允许你配置一个步骤 ...