zookeeper 基本API | AiTi修炼|重剑无锋,拈花微笑
Header
Header

zookeeper 基本API

1. 连接zookeeper集群

java
/** zookeeper集群连接地址 */
static final String CONNECT_ADDR = "zk1:2181,zk2:2181,zk3:2181";
/** session超时时间 */
static final int SESSION_OUTTIME = 2000;//ms
/** 信号量,阻塞程序执行,用于等待zookeeper连接成功,发送成功信号 */
static final CountDownLatch connectedSemaphore = new CountDownLatch(1);
public static void main(String[] args) throws Exception{
ZooKeeper zk = new ZooKeeper(CONNECT_ADDR, SESSION_OUTTIME, new Watcher(){
@Override
public void process(WatchedEvent event) {
//获取事件的状态
KeeperState keeperState = event.getState();
EventType eventType = event.getType();
//如果是建立连接
if(KeeperState.SyncConnected == keeperState){
if(EventType.None == eventType){
//如果建立连接成功,则发送信号量,让后续阻塞程序向下执行
connectedSemaphore.countDown();
System.out.println("zk 建立连接");
}
}
}
});
//进行阻塞
connectedSemaphore.await();

#### 2.创建节点
java
/**
*
* @param zk
* @throws KeeperException
* @throws InterruptedException
*/
private static void createNode(ZooKeeper zk) throws KeeperException, InterruptedException {
//zk的原始api中有两种创建节点方式:同步以及异步方式
//创建节点,该节点为持久化节点(CreateMode.PERSISTENT),只要创建成功即使客户端会话断开,该节点也会被持久化在zk集群
zk.create(ZK_NODE1_PATH, ZK_NODE1_DATA.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
//创建子节点,在zk的原始api中不支持递归创建节点,即父节点不存在,则无法创建子节点,假设/zk_node2节点不存在,则不可以创建zk_node2/child_node2
zk.create(ZK_NODE1_CHILD_PATH, ZK_NODE1_CHILD_DATA.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
//
}

#### 3.获取节点信息
java
/**
*
* @param zk
* @throws KeeperException
* @throws InterruptedException
*/
private static void getNodeInfo(ZooKeeper zk) throws KeeperException, InterruptedException {
//zk的原始api中有两种获取节点方式:同步以及异步方式
//获取节点数据,返回字节数组
byte[] data = zk.getData(ZK_NODE1_PATH, false, null);
//将字节数组转换为String
System.out.println(new String(data));
}

#### 4.更新节点信息
java
/**
*
* @param zk
* @throws KeeperException
* @throws InterruptedException
*/
private static void uptNodeInfo(ZooKeeper zk) throws KeeperException, InterruptedException {
//zk的原始api中有两种更新节点方式:同步以及异步方式
//更新节点数据
zk.setData(ZK_NODE1_PATH, ZK_NODE1_UPT_DATA.getBytes(), -1);
//获取更新后的节点信息
getNodeInfo(zk);
}

#### 5.判断节点是否存在
java
/**
*
* @param zk
* @return
* @throws KeeperException
* @throws InterruptedException
*/
private static boolean isExitsNode(ZooKeeper zk) throws KeeperException, InterruptedException {
Stat stat =zk.exists(ZK_NODE1_PATH,false);
System.out.print(stat);
return null==stat;
}

#### 6.删除节点
java
/**
*
* @param zk
* @throws KeeperException
* @throws InterruptedException
*/
private static void deleteNode(ZooKeeper zk) throws KeeperException, InterruptedException {
//zk的原始api中有两种删除节点方式:同步以及异步方式
if(isExitsNode(zk)){
zk.delete(ZK_NODE1_PATH,-1);
}
}

rscala.com版权所有,本文zookeeper 基本API转载请注明出处:http://rscala.com/index.php/342.html

该文章归档分类于 zookeeper实践

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注

*

code