1. API 相关介绍
Zookeeper作为一个分布式框架,主要用来解决分布式一致性问题,它提供了简单的分布式原语,并且对多种编程语言提供了APl,Zooeeper API 共包含五个包
,分别为∶
- org.apache.zookeeper
- org.apache.zookeeper.data
- org.apache.zookeeper.server
- org.apache.zookeeper. server.quorum
- org.apache.zookeeper.server.upgrade
其中 org.apache.zookeeper,包含Zookeeper类,它是编程时最常用的类文件
。这个类是Zookeeper客户端的主要类文件。如果要使用Zookeeper服务,应用程序首先必须创建一个Zooeeper 实例,这时就需要使用此类。一旦客户端和Zookeeper服务端建立起了连接,Zookeeper系统将会给本次连接会话分配一个ID值,并且客户端将会周期性的向服务器端发送心跳来维持会话连接。只要连接有效,客户端就可以使用 Zookeeper API 来做相应处理了。
2. 准备工作
- 导入依赖
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
</dependency>
3. 建立会话
package com.study.api;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
public class CreateSession implements Watcher {
private static final CountDownLatch countDownLatch = new CountDownLatch(1);
/**
* 建立会话
*/
public static void main(String[] args) throws IOException, InterruptedException {
/*
客户端可以通过创建一个zk实例来连接zk服务器 new Zookeeper(connectString,sessionTimeOut,Wather)
connectString: 连接地址:IP:端口
sessionTimeOut:会话超时时间:单位毫秒
Watcher:监听器(当特定事件触发监听时,zk会通过watcher通知到客户端)
*/
ZooKeeper zooKeeper = new ZooKeeper("39.106.101.9:2181",5000,new CreateSession());
System.out.println(zooKeeper.getState());
// 计数工具类:CountDownLatch:不让main方法结束,让线程处于等待阻塞
countDownLatch.await();
//表示会话真正建
System.out.println("客户端与服务端会话真正建立了");
}
/**
* 回调方法:处理来自服务器端的watcher通知
*/
public void process(WatchedEvent watchedEvent) {
if(watchedEvent.getState() == Event.KeeperState.SyncConnected){
//解除主程序在CountDownLatch上的等待阻塞
System.out.println("process方法执行了...");
countDownLatch.countDown();
}
}
}
注意: Zookeeper 客户端和服务端会话的建立是一个异步的过程,也就是说在程序中,构造方法会在处理完客户端初始化工作后立即返回,在大多数情况下,此时并没有真正建立好一个可用的会话,在会话的生命周期中处于"CONNECTING"
的状态。当该会话真正创建完毕后ZooKeeper服务端会向会话对应的客户端发送一个事件通知,以告知客户端,客户端只有在获取这个通知之后,才算真正建立了会话。
4. 创建节点
package com.study.api;
import org.apache.zookeeper.*;
import java.io.IOException;
public class CreateNote implements Watcher {
private static ZooKeeper zooKeeper;
/**
* 建立会话
*/
public static void main(String[] args) throws IOException, InterruptedException {
/*
客户端可以通过创建一个zk实例来连接zk服务器 new Zookeeper(connectString,sessionTimeOut,Wather)
connectString: 连接地址:IP:端口
sessionTimeOut:会话超时时间:单位毫秒
Watcher:监听器(当特定事件触发监听时,zk会通过watcher通知到客户端)
*/
zooKeeper = new ZooKeeper<