ZooKeeper之java客户端访问-入门介绍

时间 2014-03-22 22:42:48 CSDN博客
原文 http://blog.csdn.net/fengspg/article/details/21805075
主题 ZooKeeper Java
上篇简单的介绍了单点部署ZooKeeper及节点管理。

这里介绍下如何通过java客户端进行各个节点的管理。

具体就不一一介绍,相信从代码的注释中就可以看明白

首先创建一个zookeeper的基础类,里面包含了基本的节点管理方法,如下:

package com.zktest.newtest;

import java.io.IOException;
import java.util.List;
import java.util.concurrent.CountDownLatch;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;

public class BaseZookeeper implements Watcher
{

public ZooKeeper zooKeeper;

private static final int SESSION_TIME_OUT = 2000;

private CountDownLatch countDownLatch = new CountDownLatch(1);

/**
* 连接zookeeper
*
* @param host
* @throws IOException
* @throws InterruptedException
*/
public void connectZookeeper(String host) throws IOException,
InterruptedException
{
zooKeeper = new ZooKeeper(host, SESSION_TIME_OUT, this);
countDownLatch.await();
System.out.println("zookeeper connect ok");

}

/**
* 实现watcher的接口方法,当连接zookeeper成功后,zookeeper会通过此方法通知watcher<br>
* 此处为如果接受到连接成功的event,则countDown,让当前线程继续其他事情。
*/
@Override
public void process(WatchedEvent event)
{
if (event.getState() == KeeperState.SyncConnected)
{
System.out.println("watcher received event");
countDownLatch.countDown();
}
}

/**
* 根据路径创建节点,并且设置节点数据
* @param path
* @param data
* @return
* @throws KeeperException
* @throws InterruptedException
*/
public String createNode(String path, byte[] data) throws KeeperException,
InterruptedException
{
return this.zooKeeper.create(path, data, Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
}

/**
* 根据路径获取所有孩子节点
*
* @param path
* @return
* @throws KeeperException
* @throws InterruptedException
*/
public List<String> getChildren(String path) throws KeeperException,
InterruptedException
{
return this.zooKeeper.getChildren(path, false);
}

public Stat setData(String path, byte [] data, int version) throws KeeperException, InterruptedException
{
return this.zooKeeper.setData(path, data, version);
}

/**
* 根据路径获取节点数据
*
* @param path
* @return
* @throws KeeperException
* @throws InterruptedException
*/
public byte[] getData(String path) throws KeeperException,
InterruptedException
{
return this.zooKeeper.getData(path, false, null);
}

/**
* 删除节点
*
* @param path
* @param version
* @throws InterruptedException
* @throws KeeperException
*/
public void deletNode(String path, int version)
throws InterruptedException, KeeperException
{
this.zooKeeper.delete(path, version);
}

/**
* 关闭zookeeper连接
*
* @throws InterruptedException
*/
public void closeConnect() throws InterruptedException
{
if (null != zooKeeper)
{
zooKeeper.close();
}
}

}
创建客户端进行测试,代码如下:
package com.spg.zktest.newtest;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;

import org.apache.zookeeper.KeeperException;

public class Client
{

/**
* @param args
* @throws InterruptedException
* @throws IOException
* @throws KeeperException
*/
public static void main(String[] args) throws IOException, InterruptedException, KeeperException
{
BaseZookeeper baseZookeeper = new BaseZookeeper();

String host = "192.168.183.128:2181";

// 连接zookeeper
baseZookeeper.connectZookeeper(host);
System.out.println("--------connect zookeeper ok-----------");

// 创建节点
byte [] data = {1, 2, 3, 4, 5};
String result = baseZookeeper.createNode("/test", data);
System.out.println(result);
System.out.println("--------create node ok-----------");

// 获取某路径下所有节点
List<String> children = baseZookeeper.getChildren("/");
for (String child : children)
{
System.out.println(child);
}
System.out.println("--------get children ok-----------");

// 获取节点数据
byte [] nodeData = baseZookeeper.getData("/test");
System.out.println(Arrays.toString(nodeData));
System.out.println("--------get node data ok-----------");

// 更新节点数据
data = "test data".getBytes();
baseZookeeper.setData("/test", data, 0);
System.out.println("--------set node data ok-----------");

nodeData = baseZookeeper.getData("/test");
System.out.println(Arrays.toString(nodeData));
System.out.println("--------get node new data ok-----------");

baseZookeeper.closeConnect();
System.out.println("--------close zookeeper ok-----------");
}

}
从命令行中看操作后的结果,如下:
1:根目录下节点


2:查看test节点信息


OK,测试结果到此结束。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值