栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springBoot zookeeper Watch监听

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springBoot zookeeper Watch监听

springBoot zookeeper Watch监听 java api

导入依赖

    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.8.RELEASE
        
    
    

        
            org.springframework.boot
            spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
        
            org.springframework.boot
            spring-boot-starter-web
        






        
            org.projectlombok
            lombok
        
        
        
            org.apache.curator
            curator-framework
            4.0.0
        

        
            org.apache.curator
            curator-recipes
            4.0.0
        
    
监听单个节点
    public void testNodeCache() throws Exception {
        //1. 创建NodeCache对象
        final NodeCache nodeCache = new NodeCache(Client,"/app1");
        //2. 注册监听
        nodeCache.getListenable().addListener(new NodeCacheListener() {
            @Override
            public void nodeChanged() throws Exception {
                System.out.println("节点变化了~");
                //获取修改节点后的数据
                byte[] data = nodeCache.getCurrentData().getData();
                System.out.println(new String(data));
            }
        });
        //3. 开启监听.如果设置为true,则开启监听是,加载缓冲数据
        nodeCache.start(true);
        while (true){
        }
    }
application.yml springBoot配置文件
zookeeper:
    address: 192.168.23.129:2181  #zookeeper端口以及地址
    sessionTimeoutMs: 2000   #会话超时时间,单位毫秒,默认60000ms
    connectionTimeoutMs: 2000 #连接创建超时时间,单位毫秒,默认60000ms
config配置文件,加载zookpeeper连接
@Configuration
@Data
public class ZKclientConfig {
    @Value("${zookeeper.address}")
    private String connect;

    @Value("${zookeeper.sessionTimeoutMs}")
    private Integer sessionTimeoutMs;

    @Value("${zookeeper.connectionTimeoutMs}")
    private Integer connectionTimeoutMs;

    @Bean
    public Curatorframework Client(){
        //重试策略
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 10);
        Curatorframework ZkClient = CuratorframeworkFactory.builder()
                .connectString(connect)
                .sessionTimeoutMs(sessionTimeoutMs)
                .connectionTimeoutMs(connectionTimeoutMs)
                .retryPolicy(retryPolicy)
                .namespace("qyx") //根节点
                .build();
        ZkClient.start();
        return ZkClient;
    }

}

在虚拟机zookeeper中修改节点数据

控制台打印

再次修改数据

监控子节点

创建节点

两个节点的值设置为

   public void testPathChildrenCache() throws Exception {
        //1.创建监听对象
        PathChildrenCache pathChildrenCache = new PathChildrenCache(Client,"/app2",true);
        //2. 绑定监听器
        pathChildrenCache.getListenable().addListener(new PathChildrenCacheListener() {    			@Override
        public void childEvent(Curatorframework client, PathChildrenCacheEvent event) throws Exception {
            System.out.println("子节点变化了~");
            System.out.println(event);
            //监听子节点的数据变更,并且拿到变更后的数据
            //1.获取类型
            PathChildrenCacheEvent.Type type = event.getType();
            //2.判断类型是否是update
            if(type.equals(PathChildrenCacheEvent.Type.CHILD_UPDATED)){
                System.out.println("数据变了!!!");
                byte[] data = event.getData().getData();
                System.out.println(new String(data));
            }
        }
        });
        //3. 开启
        pathChildrenCache.start();
        while (true){
        }
    }

修改虚拟机zookeeper中app22节点数据看控制台输出


修改虚拟机zookeeper中app23节点数据看控制台输出


所以,app2的子节点无论那个发生变化,都会被监听到
但是修改app2时

不会被监听到

监听该节点以及子节点
    public void testTreeCache() throws Exception {
        //1. 创建监听器
        TreeCache treeCache = new TreeCache(Client,"/app2");
        //2. 注册监听
        treeCache.getListenable().addListener(new TreeCacheListener() {
            @Override
            public void childEvent(Curatorframework client, TreeCacheEvent event) throws Exception {
                System.out.println("节点变化了");
                System.out.println(event);
            }
        });
        //3. 开启
        treeCache.start();
        while (true){
        }
    }

修改虚拟机zookeeper中app2节点数据看控制台输出


修改虚拟机zookeeper中app22节点数据看控制台输出


修改虚拟机zookeeper中app23节点数据看控制台输出


因此节点app2和其子节点app22和app23的改变都会被监听到

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/276861.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号