基本使用
org.apache.zookeeper.Zookeeper 是客户端入口主类,负责建立与server的会话,它提供了表1所示几类主要方法:
功能 描述
create 在本地目录树中创建一个节点
delete 删除一个节点
exists 测试本地是否存在目标节点
get /set data 从目标节点上读取/写数据
get /set ACL 获取/设置目标节点访问控制列表信息
get children 检索一个子节点上的列表
sync 等待要被传送的数据
demo增删改查
手动引入Zookeeper的jar包
SimpleDemo.java
package testZK
import java.io .IOException
import org.apache .zookeeper .CreateMode
import org.apache .zookeeper .KeeperException
import org.apache .zookeeper .Watcher
import org.apache .zookeeper .ZooDefs .Ids
import org.apache .zookeeper .ZooKeeper
public class SimpleDemo {
// 会话超时时间,设置为与系统默认时间一致
private static final int SESSION_TIMEOUT = 30000
// 创建 ZooKeeper 实例
ZooKeeper zk
// 创建 Watcher 实例
Watcher wh = new Watcher() {
public void process(org.apache .zookeeper .WatchedEvent event)
{
System.out .println (event.toString ())
}
}
// 初始化 ZooKeeper 实例
private void createZKInstance() throws IOException
{
zk = new ZooKeeper("192.168.230.11:2181" , SimpleDemo.SESSION _TIMEOUT, this.wh )
}
private void ZKOperations() throws IOException, InterruptedException, KeeperException
{
System.out .println ("/n1. 创建 ZooKeeper 节点 (znode : zoo2, 数据: myData2 ,权限: OPEN_ACL_UNSAFE ,节点类型: Persistent" )
zk.create ("/zoo2" , "myData2" .getBytes (), Ids.OPEN _ACL_UNSAFE, CreateMode.PERSISTENT )
System.out .println ("/n2. 查看是否创建成功: " )
System.out .println (new String(zk.getData ("/zoo2" , false, null)))
System.out .println ("/n3. 修改节点数据 " )
zk.setData ("/zoo2" , "shenlan211314" .getBytes (), -1 )
System.out .println ("/n4. 查看是否修改成功: " )
System.out .println (new String(zk.getData ("/zoo2" , false, null)))
System.out .println ("/n5. 删除节点 " )
zk.delete ("/zoo2" , -1 )
System.out .println ("/n6. 查看节点是否被删除: " )
System.out .println (" 节点状态: [" + zk.exists ("/zoo2" , false) + "]" )
}
private void ZKClose() throws InterruptedException
{
zk.close ()
}
public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
SimpleDemo dm = new SimpleDemo()
dm.createZKInstance ()
dm.ZKOperations ()
dm.ZKClose ()
}
}
Zookeeper的监听器工作机制
监听器是一个接口,我们的代码中可以实现Wather这个接口,实现其中的process方法,方法中即我们自己的业务逻辑
监听器的注册是在获取数据的操作中实现:
getData(path,watch?)监听的事件是:节点数据变化事件
getChildren(path,watch?)监听的事件是:节点下的子节点增减变化事件