CSDN话题挑战赛第2期
参赛话题:学习笔记
学习之路,长路漫漫,需要您的陪伴。
关注一波,您的关注是我最大的动力。
目录
前提:保证服务器上 Zookeeper 集群服务端启动。
1.IDEA 环境搭建
1
)创建一个maven工程:
zookeeper
)创建一个maven工程:
zookeeper
2
)添加
pom
文件
)添加
pom
文件
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
3
)拷贝
log4j.properties
文件到项目根目录
)拷贝
log4j.properties
文件到项目根目录
需要在项目的
src/main/resources
目录下,新建一个文件,命名为“
log4j.properties
”,在文件中填入。
src/main/resources
目录下,新建一个文件,命名为“
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
4
)创建包名
com.atguigu.zk
)创建包名
com.atguigu.zk
5
)创建类名称
zkClient
)创建类名称
zkClient
2 创建 ZooKeeper 客户端
private static String connectString="192.168.23.100:2181,192.168.23.101:2181,192.168.23.102:2181";
private static int sessionTimeout=200000;
private static ZooKeeper zooKeeper;
static {
try {
zooKeeper = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
注意:connectString中逗号前后不能有空格
sessionTimeout要设置的长点
这里也可以通过以下例子先进行测试连接:
private static String connectString="192.168.23.100:2181,192.168.23.101:2181,192.168.23.102:2181";
private static int sessionTimeout=200000;
private static ZooKeeper zooKeeper;
@Test
public void init() throws IOException {
zooKeeper = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
}
});
}
若出现以下错误的话:
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /luyq
有可能是下面几种原因:
1)查看是不是关闭了Linux的防火墙
2)代码中的请求时间,要大于zookeeper里面配置的延迟时间
3)以上还是不同,请在配置一下电脑的host,把ip换成域名来创建访问
3.创建子节点
create函数参数类型:参数 1:要创建的节点的路径; 参数 2:节点数据 ; 参数 3:节点权限 ;
参数
4
:节点的类型
4
:节点的类型
//创建结点
@Test
public void createnode() throws Exception {
String nodeCreate = zooKeeper.create("/atguigu", "bang".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
测试:在
hadoop102
的
zk
客户端上查看创建节点情况
hadoop102
的
zk
客户端上查看创建节点情况
[zk: localhost:2181(CONNECTED) 16] get -s /atguigu
bang
4 获取子节点并监听节点变化
//查看结点
@Test
public void getchilden() throws KeeperException, InterruptedException {
List<String> children = zooKeeper.getChildren("/", true);
children.forEach(System.out::println);
Thread.sleep(Long.MAX_VALUE);
}
需要在zookeeper初始化重写的process函数中加入以下代码,为了方便结点变化时的查看加入了辅助虚线:
@Override
public void process(WatchedEvent watchedEvent) {
System.out.println("-------------------------");
List<String> children = null;
try {
children = zooKeeper.getChildren("/", true);
children.forEach(System.out::println);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("-------------------------");
}
(
1
)在
IDEA
控制台上看到如下节点:
1
)在
IDEA
控制台上看到如下节点:
zookeeper
sanguo
atguigu
(2)在
hadoop102
的客户端上创建再创建一个节点
/atguigu1
,观察
IDEA
控制台
hadoop102
的客户端上创建再创建一个节点
/atguigu1
,观察
IDEA
控制台
[zk: localhost:2181(CONNECTED) 3] create /atguigu1 "atguigu1"
(3)在
hadoop102
的客户端上删除节点
/atguigu1
,观察
IDEA
控制台
hadoop102
的客户端上删除节点
/atguigu1
,观察
IDEA
控制台
[zk: localhost:2181(CONNECTED) 4] delete /atguigu1
5 判断 Znode 是否存在
//结点是否存在
@Test
public void is_exist() throws KeeperException, InterruptedException {
Stat exists = zooKeeper.exists("/atguigu", false);
System.out.println(exists==null?"not exist":"exist");
}
点赞,关注,收藏,您的支持是我更新的最大动力!!!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118495.html