eclipse客户端操作与LIiux命令行操作是一样的
Eclipse环境搭建
1)创建一个工程
2)解压zookeeper-3.4.10.tar.gz文件
3)拷贝zookeeper-3.4.10.jar、jline-0.9.94.jar、log4j-1.2.16.jar、netty-3.10.5.Final.jar、slf4j-api-1.6.1.jar、slf4j-log4j12-1.6.1.jar到工程的lib目录。并build一下,导入工程。
4)拷贝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/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
一、开启hadoop106、haoop107、hadoop108集群
二、eclipse编写代码初始化客户端
package com.common.zk;
import java.io.IOException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.junit.jupiter.api.Test;
public class TestZookeeper {
//连接zkServer
//获取zookeeper连接时所需要的服务器连接信息,格式为主机名:端口号
private String connectString ="hadoop106:2181,hadoop107:2181,hadoop108:2181";
//超时间设置
private int sessionTimeout=2000;
private ZooKeeper zkClient;
//初始化zk客户端
@Test
public void initClient() throws IOException {
zkClient=new ZooKeeper(connectString, sessionTimeout, new Watcher() {
@Override
public void process(WatchedEvent event) {
// 收到事件通知后的回调函数(用户的业务逻辑)
System.out.println(event.getType()+"\t"+event.getPath());
}
});
}
}
三、由此可以看出,初始化客户端成功
四、测试创建子节点
增加创建子节点方法,同时不要忘记把初始化客户端的测试方法改为before
package com.common.zk;
import java.io.IOException;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.junit.Before;
import org.junit.Test;
public class TestZookeeper {
//连接zkServer
private String connectString ="hadoop106:2181,hadoop107:2181,hadoop108:2181";
//超时间设置
private int sessionTimeout=2000;
private ZooKeeper zkClient;
//初始化zk客户端
//修改为before,否则报空指针错误
@Before
public void initClient() throws IOException {
zkClient=new ZooKeeper(connectString, sessionTimeout, new Watcher() {
@Override
public void process(WatchedEvent event) {
System.out.println(event.getType()+"\t"+event.getPath());
}
});
}
//创建子节点
//initClient此时应该修改为before
@Test
public void create() throws KeeperException, InterruptedException {
//创建子节点你的路径是/xz 创建内容是xiaozhan,要求是bytes类型,创建的权限是open_acl_unsafe,创建模式是永久节点
String path=zkClient.create("/xz", "xiaozhan".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println(path);
}
}
运行Junit测试,查看结果
路径成功输出
五、获取子节点信息
//获取子节点信息
@Test
public void getChild() throws KeeperException, InterruptedException {
List<String> zkchild=zkClient.getChildren("/", false);//false代表不监听
for (String child : zkchild) {
System.out.println(child);
}
}
运行
六、设置监听子节点
package com.common.zk;
import java.io.IOException;
import java.util.List;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.junit.Before;
import org.junit.Test;
public class TestZookeeper {
//连接zkServer
private String connectString ="hadoop106:2181,hadoop107:2181,hadoop108:2181";
//超时间设置
private int sessionTimeout=2000;
private ZooKeeper zkClient;
//初始化zk客户端
//修改为before,否则报空指针错误
@Before
public void initClient() throws IOException {
zkClient=new ZooKeeper(connectString, sessionTimeout, new Watcher() {
@Override
public void process(WatchedEvent event) {
System.out.println("---------start----------");
List<String> children;
try {
children = zkClient.getChildren("/", true);
for (String child : children) {
System.out.println(child);
}
System.out.println("---------end----------");
} catch (KeeperException | InterruptedException e) {
e.printStackTrace();
}
}
});
}
//创建子节点
//initClient此时应该修改为before
public void create() throws KeeperException, InterruptedException {
//创建子节点你的路径是/xz 创建内容是xiaozhan,要求是bytes类型,创建的权限是open_acl_unsafe,创建模式是永久节点
String path=zkClient.create("/xz", "xiaozhan".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println(path);
}
//获取子节点信息
@Test
public void getChild() throws KeeperException, InterruptedException {
List<String> zkchild=zkClient.getChildren("/", true);//true代表监听,调用上面的initClient()的watcher()方法
// for (String child : zkchild) {
// System.out.println(child);
// }
//挂起线程,保证监听的进程不会死掉
Thread.sleep(Long.MAX_VALUE);
}
}
run
在命令行创建yy节点后
控制台监听得到
在命令行删除节点yy
控制台监听到的结果