IDEA(zookeeperAPI应用)

1. IDEA环境搭建

1.1 创建一个Maven工程

1.2 添加pom文件

<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>

1.3 resources下创建log4j.properties

log4j.rootLogger=INFO, stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.logfile=org.apache.log4j.FileAppender
 log4j.appender.logfile.File=target/zk.log 
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

2. 创建ZooKeeper客户端

public class TestZK {
// 集群ip
private String connStr
="192.168.249.81:2181,192.168.249.82:2181,192.168.249.83:2181";

/*
session超时  60秒:一定不能太少,因为连接zookeeper和加载集群环境会因为性能原因延迟略高如果时间太少,还没有创建好客户端,就开始操作节点,会报错的
*/
private int sessionTimeout = 60000;

@Test
public void init() throws IOException {
// 创建监听器
Watcher watcher = new Watcher() {
public void process(WatchedEvent watchedEvent) {

}
};

// 创建zookeeper客户端
ZooKeeper zk = new ZooKeeper(connStr, sessionTimeout, watcher);
}
}

3. 创建节点

  1. 一个ACL对象就是一个Idpermission
  2. 表示哪个/哪些范围的IdWho)在通过了怎样的鉴权(How)之后,就允许进行那些操作What):Who How What
  3. permissionWhat)就是一个int表示的位码,每一位代表一个对应操作的允许状态。
  4. 类似linux的文件权限,不同的是共有5种操作:CREATEREADWRITEDELETEADMIN(对应更改ACL的权限)
  5. OPEN_ACL_UNSAFE:创建开放节点,允许任意操作 (用的最少,其余的权限用的很少)
  6. READ_ACL_UNSAFE:创建只读节点
  7. CREATOR_ALL_ACL:创建者才有全部权限
@Before
public void init()	throws IOException{
// 省略...
}

@Test
public void createNode() throws Exception {
String nodeCreated = zKcli.create("/lagou", "laosun".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
// 参数1:要创建的节点的路径
// 参数2:节点数据
// 参数3:节点权限
// 参数4:节点的类型
System.out.println("nodeCreated = " + nodeCreated);
}

4. 查询节点的值

@Test
public void find() throws Exception{
byte[] bs = zKcli.getData("/lagou", false, new Stat()); // 路径不存在时会报错
String data = new String(bs); System.out.println("查询到数据:"+data);
}

5. 修改节点的值

@Test
public void update()throws Exception{
Stat stat = zKcli.setData("/lagou", "laosunA".getBytes(), 0); //先查看节点详情,获得dataVersion = 0
System.out.println(stat);
}

6. 删除节点

@Test
public void delete() throws Exception {
zKcli.delete("/lagou", 1);	// 先查看节点详情,获得dataVersion = 1 System.out.println("删除成功!");
}

7. 获取子节点

@Test
public void getChildren() throws Exception {
List<String> children = zKcli.getChildren("/",false); // false:不监听for (String child : children) {
System.out.println(child);
}
}

8. 监听子节点的变化

@Test
public void getChildren() throws Exception {
List<String> children = zKcli.getChildren("/", true); // true:注册监听for (String child : children) {
System.out.println(child);
}
// 让线程不停止,等待监听的响应
System.in.read();
}

程序在运行的过程中,我们在linux下创建一个节点

IDEA的控制台就会做出响应:NodeChildrenChanged--/

9. 判断Znode是否存在

@Test
public void exist() throws Exception {
Stat stat = zKcli.exists("/lagou", false); System.out.println(stat == null ? "不存在" : "存在");
}

节选自拉钩教育JAVA系列教程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值