一、前提

  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. 快速排序——PowerShell版

    继续读啊哈磊算法有感系列,继续升华.上一篇是冒泡排序,在结尾总结了一下冒泡排序的缺点——时间复杂度O(N*N)太大.这一篇来说一下快速排序,快速排序可以在多数情况下克服冒泡排序的缺点(最坏的情况下和冒 ...

  2. biicode:一个现代的 C 依赖管理器

    因为经营原因,公司已经倒闭了. Biicode (just the company) post-mortemPosted on August 11, 2015 by biicode TeamThis ...

  3. 3DES加密算法32个字节

    简介 最近开发的一个项目,使用到了3DES加密算法,加密socket服务端和客户端通信的报文,因为加密秘钥是32个字节,结果折腾了一番,现在记录下来分享! 1.Des3EncryptUtils.jav ...

  4. si4438 cca 侦听

    /* set GPIO0 for RSSI interrupt / CCA */txbuf[0] = CMD_GPIO_PIN_CFG;txbuf[1] = 27; /* GPIO[0] = 27: ...

  5. 9260与SAM-BA连接(转)

    对于AT91SAM9260的bootloader的烧写,常常会遇到这样的问题:对于干净的NAND FLASH(即没有烧写过任何东西),AT91SAM9260与sam-ba很容易连接成功,但当烧写过bo ...

  6. shell命令之根据字符串查询文件对应行记录

    显示xxx字符串对应的行数,并向前打印3行,向后打印2行,查找对应文件为filename.txt 命令:grep -n 'xxx' -A3 -B2 --color=auto filename.txt ...

  7. 关于用Spine制作骨骼动画的步骤

    步骤: 1.打开spine. 2.新建一个空项目. 3.点右边Tree下的Images模块,导入在自己的切片素材和原整图. 4.把原整图拖到场景中,点右下角Color改变原图的颜色,方便后面对照. 5 ...

  8. 【转】【Linux】linux awk命令详解

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  9. ubuntu/centos网络配置

    UBUNTU网络配置 配置临时的Ip ifconfig eth0 其中24指的网络掩码24位. vim /etc/network/interfaces 添加下面内容 auto eth0 #开机自动连接 ...

  10. adb调试功能

    参考: http://www.cnblogs.com/meil/archive/2012/05/24/2516055.html http://www.biemmeitalia.net/blog/and ...