zk的前篇:Zookeeper - 本地安装与参数配置
Zookeeper - 节点监听
目录
- "1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0modelVersion>
- <parent>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-parentartifactId>
- <version>2.7.3version>
- <relativePath/>
- parent>
- <groupId>com.examplegroupId>
- <artifactId>ZookeeperartifactId>
- <version>0.0.1-SNAPSHOTversion>
- <name>Zookeepername>
- <description>Zookeeperdescription>
- <properties>
- <java.version>1.8java.version>
- properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starterartifactId>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-devtoolsartifactId>
- <scope>runtimescope>
- <optional>trueoptional>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-configuration-processorartifactId>
- <optional>trueoptional>
- dependency>
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- <optional>trueoptional>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-testartifactId>
- <scope>testscope>
- dependency>
- <dependency>
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <version>RELEASEversion>
- dependency>
- <dependency>
- <groupId>org.apache.logging.log4jgroupId>
- <artifactId>log4j-coreartifactId>
- <version>2.12.4version>
- dependency>
- <dependency>
- <groupId>org.apache.zookeepergroupId>
- <artifactId>zookeeperartifactId>
- <version>3.5.7version>
- dependency>
- dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-maven-pluginartifactId>
- <configuration>
- <excludes>
- <exclude>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- exclude>
- excludes>
- configuration>
- plugin>
- plugins>
- build>
-
- project>
在resources 目录下,名为 log4j.properties 的文件:
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
- package zookeeper;
-
- import org.apache.zookeeper.*;
- import org.apache.zookeeper.data.Stat;
- import org.junit.Before;
- import org.junit.Test;
-
- import java.io.IOException;
- import java.util.List;
-
- public class zkClient {
- private static String connectString =
- "hadoop102:2181,hadoop103:2181,hadoop104:2181";
- private static int sessionTimeout = 2000;
- private ZooKeeper zkClient = null;
-
- @Before
- public void init() throws IOException {
- zkClient = new ZooKeeper(connectString, sessionTimeout, new
- Watcher() {
- @Override
- public void process(WatchedEvent watchedEvent) {
- System.out.println(watchedEvent.getType() + "--"
- + watchedEvent.getPath());
- try {
- List
children = zkClient.getChildren("/", - true);
- for (String child : children) {
- System.out.println(child);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- });
- }
-
- //创建节点
- @Test
- public void create() throws InterruptedException, KeeperException {
- String CreateZNode = zkClient.create("/rank10", "10".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
- }
-
- //监听节点
- @Test
- public void getChildren() throws InterruptedException, KeeperException {
- Thread.sleep(Long.MAX_VALUE);
- }
-
- //判断节点是否存在
- @Test
- public void exist() throws Exception {
- Stat stat = zkClient.exists("/rank1", false);
- System.out.println(stat == null ? "not exist" : "exist");
- }
-
- }
注意,这里我是根据 host 来的而不是ip,所以需要先把ip配置进host文件:


ls查看一下,上面的是测试前,下面的为测试后的结果。这里的 rank10 创建成功。
ls /

后来是把里面的代码写到 init() 里面了:

运行初结果:

接着去删掉一个节点,看看idea这里的监听是否正常:
delete /rank10

idea处的监听效果,成功监听到了节点的删除:


这里判断 rank1 是否存在,运行结果:
