目录
1、将服务器的防火墙关闭
2、启动zookeeper服务器以及客户端
3、通过idea创建maven工程
4、pom.xml配置如下
5、配置文件
6、节点增删改查
6.1、连接zookeeper服务
6.2 释放资源
6.3 创建节点
6.4 查询节点
6.5 修改节点
6.6 删除节点
1、将服务器的防火墙关闭
使用SecureCRT工具连接服务器,然后关闭防火墙:
systemctl stop firewalld
2、启动zookeeper服务器以及客户端
--进入到zookeeper安装目录下的bin目录,启动zookeeper服务
./zkServer.sh start
--重新克隆一份会话,然后同样进入zookeeper安装目录下的bin目录,启动客户端
./zkCli.sh (在本机安装的客户端可以直接使用该操作)
./zkCli.sh -server ip地址:2181(如果客户端不和服务在同一机器上,需要加上服务的ip地址)
3、通过idea创建maven工程
--进入到zookeeper安装目录下的bin目录,启动zookeeper服务
./zkServer.sh start
--重新克隆一份会话,然后同样进入zookeeper安装目录下的bin目录,启动客户端
./zkCli.sh (在本机安装的客户端可以直接使用该操作)
./zkCli.sh -server ip地址:2181(如果客户端不和服务在同一机器上,需要加上服务的ip地址)
结构如下所示:
4、pom.xml配置如下
4.0.0
com.flyrain.zk
curator-zk
1.0-SNAPSHOT
junit
junit
4.10
test
org.apache.curator
curator-framework
4.0.0
org.apache.curator
curator-recipes
4.0.0
org.slf4j
slf4j-api
1.7.21
org.slf4j
slf4j-log4j12
1.7.21
org.apache.maven.plugins
maven-compiler-plugin
3.1
1.8
1.8
5、配置文件
配置文件下只有日志文件,内容比较简单,如下所示
log4j.rootLogger=off,stdout
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%d{yyyy-MM-dd HH/:mm/:ss}]%-5p %c(line/:%L) %x-%m%n
6、节点增删改查
6.1、连接zookeeper服务
public class CuratorTest {
private Curatorframework client;
@Test
public void testConZookeeper(){
//第一种连接策略CuratorframeworkFactory.newClient()
//重试策略
RetryPolicy retry = new ExponentialBackoffRetry(3000, 3);
//第二种使用CuratorframeworkFactory.builder()链式编程方式
//namespace()设置名称空间根目录,以后不用每次都写前面
client = CuratorframeworkFactory.builder()
.connectString("192.168.117.128:2181")
.sessionTimeoutMs(90 * 1000)
.connectionTimeoutMs(15 * 1000)
.retryPolicy(retry)
.namespace("flyrain")
.build();
//开启连接
client.start();
}
}
6.2 释放资源
public class CuratorTest {
private Curatorframework client;
@Test
public void testConZookeeper(){
//第一种连接策略CuratorframeworkFactory.newClient()
//重试策略
RetryPolicy retry = new ExponentialBackoffRetry(3000, 3);
//第二种使用CuratorframeworkFactory.builder()链式编程方式
//namespace()设置名称空间根目录,以后不用每次都写前面
client = CuratorframeworkFactory.builder()
.connectString("192.168.117.128:2181")
.sessionTimeoutMs(90 * 1000)
.connectionTimeoutMs(15 * 1000)
.retryPolicy(retry)
.namespace("flyrain")
.build();
//开启连接
client.start();
}
}
6.2 释放资源
如果不报错,则说明连接成功,然后需要对节点进行操作,我们需在执行其他方法时都要先执行上述连接服务操作,将@Test修改为@Before即可,然后连接服务后,我们也需要释放资源,其代码如下:
//释放资源
@After
public void closeCurator(){
if(client != null){
client.close();
}
}
6.3 创建节点
@Test
public void createNode(){
//1.基本创建 ,节点为/flyrain/app1, flyrain作为根节点
//如果创建节点,没有指定数据,则默认将当前客户端的ip作为数据存储
try {
String path = client.create().forPath("/flyrain");
System.out.println("path : "+path);
} catch (Exception e) {
e.printStackTrace();
}
}
//2.创建带数据的节点
@Test
public void testNodeWithData(){
try {
String path = client.create().forPath("/app2", "nihao".getBytes());
System.out.println("path : "+path); ///app2
} catch (Exception e) {
e.printStackTrace();
}
}
//3.创建节点类型
@Test
public void testNodeType(){
try {
String path = client.create().withMode(CreateMode.EPHEMERAL).forPath("/app3");
System.out.println("path : "+path); ///app3
} catch (Exception e) {
e.printStackTrace();
}
}
//4.创建多级节点
@Test
public void testMoreNode(){
//creatingParentsIfNeeded :如果父节点不存在,则创建
try {
String path = client.create().creatingParentsIfNeeded().forPath("/app4/p1");
System.out.println("path : "+path); ///app4/p1
} catch (Exception e) {
e.printStackTrace();
}
}
6.4 查询节点
@Test
public void testQueryData(){
try {
byte[] data = client.getData().forPath("/app2");
System.out.println("data: "+new String(data));
} catch (Exception e) {
e.printStackTrace();
}
}
//查询子节点
@Test
public void testQueryChildNode(){
try {
List list = client.getChildren().forPath("/");
System.out.println(" list "+list);
} catch (Exception e) {
e.printStackTrace();
}
}
//查询子节点状态信息
@Test
public void testChildStatus(){
Stat stat = new Stat();
System.out.println("stat1 : "+stat);
try {
byte[] data = client.getData().storingStatIn(stat).forPath("/app2");
System.out.println("stat2 : "+stat.getCtime());
} catch (Exception e) {
e.printStackTrace();
}
}
6.5 修改节点
@Test
public void testUpdatabaseData(){
try {
client.setData().forPath("/app2", "wobuhao".getBytes());
} catch (Exception e) {
e.printStackTrace();
}
}
//根据版本修改
@Test
public void testUpdataDataByVersion(){
Stat stat = new Stat();
//查询节点状态信息:
try {
client.getData().storingStatIn(stat).forPath("/app2");
//查询版本信息
int version = stat.getVersion();
client.setData().withVersion(version).forPath("/app2", "随遇而安".getBytes());
} catch (Exception e) {
e.printStackTrace();
}
}
6.6 删除节点
//删除单个节点
@Test
public void testDeleteoneNode(){
try {
//app3下无子节点
client.delete().forPath("/app3");
} catch (Exception e) {
e.printStackTrace();
}
}
//删除带有子节点的节点
@Test
public void testDeleteNodeWithChildNode(){
try {
//app4节点下还有p1子节点
client.delete().deletingChildrenIfNeeded().forPath("/app4");
} catch (Exception e) {
e.printStackTrace();
}
}
//必须删除成功
@Test
public void testDeleteNeed(){
try {
//flyrain根节点下还有flryain子节点
client.delete().guaranteed().forPath("/flyrain");
} catch (Exception e) {
e.printStackTrace();
}
}
//回调
@Test
public void testCallBack(){
try {
client.delete().guaranteed().inBackground(new BackgroundCallback() {
@Override
public void processResult(Curatorframework client, CuratorEvent event) throws Exception {
System.out.println("我被删除了...");
System.out.println(event);
}
}).forPath("/app2");
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testQueryData(){
try {
byte[] data = client.getData().forPath("/app2");
System.out.println("data: "+new String(data));
} catch (Exception e) {
e.printStackTrace();
}
}
//查询子节点
@Test
public void testQueryChildNode(){
try {
List list = client.getChildren().forPath("/");
System.out.println(" list "+list);
} catch (Exception e) {
e.printStackTrace();
}
}
//查询子节点状态信息
@Test
public void testChildStatus(){
Stat stat = new Stat();
System.out.println("stat1 : "+stat);
try {
byte[] data = client.getData().storingStatIn(stat).forPath("/app2");
System.out.println("stat2 : "+stat.getCtime());
} catch (Exception e) {
e.printStackTrace();
}
}
6.5 修改节点
@Test
public void testUpdatabaseData(){
try {
client.setData().forPath("/app2", "wobuhao".getBytes());
} catch (Exception e) {
e.printStackTrace();
}
}
//根据版本修改
@Test
public void testUpdataDataByVersion(){
Stat stat = new Stat();
//查询节点状态信息:
try {
client.getData().storingStatIn(stat).forPath("/app2");
//查询版本信息
int version = stat.getVersion();
client.setData().withVersion(version).forPath("/app2", "随遇而安".getBytes());
} catch (Exception e) {
e.printStackTrace();
}
}
6.6 删除节点
//删除单个节点
@Test
public void testDeleteoneNode(){
try {
//app3下无子节点
client.delete().forPath("/app3");
} catch (Exception e) {
e.printStackTrace();
}
}
//删除带有子节点的节点
@Test
public void testDeleteNodeWithChildNode(){
try {
//app4节点下还有p1子节点
client.delete().deletingChildrenIfNeeded().forPath("/app4");
} catch (Exception e) {
e.printStackTrace();
}
}
//必须删除成功
@Test
public void testDeleteNeed(){
try {
//flyrain根节点下还有flryain子节点
client.delete().guaranteed().forPath("/flyrain");
} catch (Exception e) {
e.printStackTrace();
}
}
//回调
@Test
public void testCallBack(){
try {
client.delete().guaranteed().inBackground(new BackgroundCallback() {
@Override
public void processResult(Curatorframework client, CuratorEvent event) throws Exception {
System.out.println("我被删除了...");
System.out.println(event);
}
}).forPath("/app2");
} catch (Exception e) {
e.printStackTrace();
}
}
//删除单个节点
@Test
public void testDeleteoneNode(){
try {
//app3下无子节点
client.delete().forPath("/app3");
} catch (Exception e) {
e.printStackTrace();
}
}
//删除带有子节点的节点
@Test
public void testDeleteNodeWithChildNode(){
try {
//app4节点下还有p1子节点
client.delete().deletingChildrenIfNeeded().forPath("/app4");
} catch (Exception e) {
e.printStackTrace();
}
}
//必须删除成功
@Test
public void testDeleteNeed(){
try {
//flyrain根节点下还有flryain子节点
client.delete().guaranteed().forPath("/flyrain");
} catch (Exception e) {
e.printStackTrace();
}
}
//回调
@Test
public void testCallBack(){
try {
client.delete().guaranteed().inBackground(new BackgroundCallback() {
@Override
public void processResult(Curatorframework client, CuratorEvent event) throws Exception {
System.out.println("我被删除了...");
System.out.println(event);
}
}).forPath("/app2");
} catch (Exception e) {
e.printStackTrace();
}
}
以上就是节点的增删改查操作,我的zookeeper版本是3.5.6版本。
路漫漫其修远兮,吾将上下而求索,希望此篇文章对大家有所帮助......



