zoukankan      html  css  js  c++  java
  • zookeeper 监听事件 PathChildrenCacheListener

    zookeeper 监听事件 PathChildrenCacheListener

    PathChildrenCacheListener一次父节点注册,监听每次子节点操作,不监听自身和查询。

    1.测试类:

    package com.qy.learn.zk.curator;
    
    import org.apache.curator.framework.CuratorFramework;
    import org.apache.curator.framework.recipes.cache.PathChildrenCache;
    import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent;
    import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener;
    import org.apache.curator.framework.recipes.cache.PathChildrenCache.StartMode;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    /**
     * @author 七脉
     * 描述:利用父节点,监听子节点的事件,每次都会触发
     */
    public class PathChildrenCacheTest {
        
        private static final Logger log = LoggerFactory.getLogger(PathChildrenCacheTest.class);
        
        public static void main(String[] args) throws Exception {
            
            //获取curator客户端
            CuratorFramework client = MyCuratorClient.client();
            //开启客户端
            client.start();
            
            //cacheData if true, node contents are cached in addition to the stat
            PathChildrenCache pathChildrenCache = new PathChildrenCache(client, "/father",true);
            //StartMode.BUILD_INITIAL_CACHE同步初始化缓存数据
            pathChildrenCache.start(StartMode.BUILD_INITIAL_CACHE);
            
            //添加节点监听事件,PathChildrenCacheListener每次都会触发
            pathChildrenCache.getListenable().addListener(new PathChildrenCacheListener() {
                
                @Override
                public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {
                    log.info("接收到PathChildrenCacheListener监听事件,节点:{},事件类型:{}", event.getData().getPath(), event.getType());
                }
            });
            
            //测试事件
            MyCuratorClient.create(client, "/father/me", "me");
            MyCuratorClient.update(client, "/father/me", "me2");
            MyCuratorClient.query(client, "/father/me");//查询不会触发
            MyCuratorClient.delete(client, "/father/me");
            
            //睡眠等待监听事件触发
            Thread.sleep(15000);
            
            pathChildrenCache.close();
            client.close();
        }
    }

    2.pom文件:

    <?xml version="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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.1.RELEASE</version>
        </parent>
        
        <groupId>com.qy.learn</groupId>
        <artifactId>qy-learn-zk-curator</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>pom</packaging>
        
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
            <maven.test.skip>true</maven.test.skip>
            <java.version>1.8</java.version>
            <spring.boot.version>2.0.1.RELEASE</spring.boot.version>
            <qy.code.version>0.0.1-SNAPSHOT</qy.code.version>
        </properties>
        
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
                <!-- 不使用springboot默认log -->
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-logging</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-log4j2</artifactId>
            </dependency>
            
            <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.4.12</version>
                <!-- 排除冲突jar -->
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            
            <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-framework</artifactId>
                <version>4.1.0</version>
            </dependency>
            
            <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-recipes</artifactId>
                <version>4.1.0</version>
            </dependency>
            
            
        </dependencies>
        
        <repositories>
            <repository>
                <id>nexus-aliyun</id>
                <name>Nexus aliyun</name>
                <url>http://maven.aliyun.com/nexus/content/groups/public</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
        </repositories>
        <pluginRepositories>
            <pluginRepository>
                <id>nexus-aliyun</id>
                <name>Nexus aliyun</name>
                <url>http://maven.aliyun.com/nexus/content/groups/public</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </pluginRepository>
        </pluginRepositories>
        
        
        <build>
            <plugins>
                <!-- 要将源码放上去,需要加入这个插件 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <configuration>
                        <attach>true</attach>
                    </configuration>
                    <executions>
                        <execution>
                            <phase>compile</phase>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>

    源码:https://pan.baidu.com/s/1WxW0NU6p7oAiK9O3Vtq-Hg

  • 相关阅读:
    nginx+tomcat配置websocket反向代理
    jmter 参数化
    postman 自动化
    python yaml文件读写
    python redis 操作
    pycharm 连接github操作
    校验身份证号
    python faker 造数据
    pandas处理日期相关的操作
    python的time几种用法strptime、strftime、localtime、mktime
  • 原文地址:https://www.cnblogs.com/zwcry/p/10442586.html
Copyright © 2011-2022 走看看