欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Curator實現(xiàn)zookeeper的節(jié)點監(jiān)聽詳解

 更新時間:2023年12月18日 10:23:13   作者:暴躁的程序猿啊  
這篇文章主要介紹了Curator實現(xiàn)zookeeper的節(jié)點監(jiān)聽詳解,Curtor框架中一共有三個實現(xiàn)監(jiān)聽的方式,一種是NodeCache監(jiān)聽指定節(jié)點,一種是pathChildrenCache監(jiān)聽子節(jié)點,一種是TreeCache可以監(jiān)控所有節(jié)點 相當(dāng)于以上兩種的合集,需要的朋友可以參考下

Curator實現(xiàn)zookeeper的節(jié)點監(jiān)聽

Curtor框架中一共有三個實現(xiàn)監(jiān)聽的方式 一種是NodeCache監(jiān)聽指定節(jié)點 一種是pathChildrenCache監(jiān)聽子節(jié)點 一種是TreeCache可以監(jiān)控所有節(jié)點 相當(dāng)于以上兩種的合集

引入依賴

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-client</artifactId>
            <version>4.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.3.0</version>
        </dependency>

創(chuàng)建一個測試類 連接好客戶端

public class CuratorTest {
    private CuratorFramework curatorFramework;
    @Before
    public void testCreate() {
        ExponentialBackoffRetry retry = new ExponentialBackoffRetry(2, 10);
        curatorFramework = CuratorFrameworkFactory.builder()
                .connectString("127.0.0.1:2181")
                .connectionTimeoutMs(60 * 1000)
                .sessionTimeoutMs(15 * 10000)
                .retryPolicy(retry).build();
        curatorFramework.start();
    }
   @After
    public void close() {
        if (curatorFramework != null) {
            curatorFramework.close();
        }
    }
}

Watch監(jiān)聽之NodeCache

監(jiān)聽一個指定節(jié)點

 @Test
    public void testUpdate() throws Exception {
        //監(jiān)聽一個節(jié)點
        NodeCache nodeCache = new NodeCache(curatorFramework,"/dongwuyuan");
        //注冊監(jiān)聽
        nodeCache.getListenable().addListener(new NodeCacheListener() {
            @Override
            public void nodeChanged() throws Exception {
                System.out.println("節(jié)點變化了?。。。?);
            }
        });
        //開啟監(jiān)聽 參數(shù) 如果設(shè)置為true 則開啟監(jiān)聽時加載緩存數(shù)據(jù)
        nodeCache.start(true);
        while (true){
        }
    }
set /dongwuyuan "laohu"

在這里插入圖片描述

Watch監(jiān)聽之PathChildrenCache

監(jiān)聽子節(jié)點的變化

 @Test
    public void testPathChildrenCache() throws Exception {
        // 參數(shù)  客戶端,路徑 ,緩存數(shù)據(jù),是否壓縮,線程池
        PathChildrenCache pathChildrenCache = new PathChildrenCache(curatorFramework,"/dongwuyuan",true);
        //綁定監(jiān)聽器
        pathChildrenCache.getListenable().addListener(new PathChildrenCacheListener() {
            @Override
            public void childEvent(CuratorFramework curatorFramework, PathChildrenCacheEvent pathChildrenCacheEvent) throws Exception {
                System.out.println("子節(jié)點變化了");
                System.out.println(pathChildrenCacheEvent);
                //監(jiān)聽子節(jié)點的變更,并且拿到變更后的數(shù)據(jù)
                PathChildrenCacheEvent.Type type = pathChildrenCacheEvent.getType();
                //判斷類型是否是update
                if(type.equals(PathChildrenCacheEvent.Type.CHILD_UPDATED)){
                     //拿到數(shù)據(jù)
                    byte[] data = pathChildrenCacheEvent.getData().getData();
                    System.out.println(data);
                }
            }
        });
        //開啟監(jiān)聽
        pathChildrenCache.start();
        while (true){
        }
    }

watch監(jiān)聽之TreeCache

  /**
     * TreeCache:監(jiān)聽節(jié)點自己和所有子節(jié)點們
     */
    @Test
    public void testTreeCache(){
        //1.創(chuàng)建監(jiān)聽器
        TreeCache treeCache = new TreeCache(curatorFramework, "/dongwuyuan");
        //2.注冊監(jiān)聽
        treeCache.getListenable().addListener(new TreeCacheListener() {
            @Override
            public void childEvent(CuratorFramework client, TreeCacheEvent event) throws Exception {
                System.out.println("節(jié)點變化了");
                System.out.println(event);
            }
        });
        //開啟監(jiān)聽
        try {
            treeCache.start();
            while (true){
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
[zk: localhost:2181(CONNECTED) 13] delete /dongwuyuan/node1

在這里插入圖片描述

[zk: localhost:2181(CONNECTED) 15] set /dongwuyuan/node2  "shizi"

在這里插入圖片描述

完整代碼

public class CuratorTest {
    private CuratorFramework curatorFramework;
    @Before
    public void testCreate() {
        ExponentialBackoffRetry retry = new ExponentialBackoffRetry(2, 10);
        curatorFramework = CuratorFrameworkFactory.builder()
                .connectString("127.0.0.1:2181")
                .connectionTimeoutMs(60 * 1000)
                .sessionTimeoutMs(15 * 10000)
                .retryPolicy(retry).build();
        curatorFramework.start();
    }
    @Test
    public void testUpdate() throws Exception {
        //監(jiān)聽一個節(jié)點
        NodeCache nodeCache = new NodeCache(curatorFramework,"/dongwuyuan");
        //注冊監(jiān)聽
        nodeCache.getListenable().addListener(new NodeCacheListener() {
            @Override
            public void nodeChanged() throws Exception {
                System.out.println("節(jié)點變化了!?。?!");
            }
        });
        //開啟監(jiān)聽 參數(shù) 如果設(shè)置為true 則開啟監(jiān)聽時加載緩存數(shù)據(jù)
        nodeCache.start(true);
        while (true){
        }
    }
    @Test
    public void testPathChildrenCache() throws Exception {
        // 參數(shù)  客戶端,路徑 ,緩存數(shù)據(jù),是否壓縮,線程池
        PathChildrenCache pathChildrenCache = new PathChildrenCache(curatorFramework,"/dongwuyuan",true);
        //綁定監(jiān)聽器
        pathChildrenCache.getListenable().addListener(new PathChildrenCacheListener() {
            @Override
            public void childEvent(CuratorFramework curatorFramework, PathChildrenCacheEvent pathChildrenCacheEvent) throws Exception {
                System.out.println("子節(jié)點變化了");
                System.out.println(pathChildrenCacheEvent);
                //監(jiān)聽子節(jié)點的變更,并且拿到變更后的數(shù)據(jù)
                PathChildrenCacheEvent.Type type = pathChildrenCacheEvent.getType();
                //判斷類型是否是update
                if(type.equals(PathChildrenCacheEvent.Type.CHILD_UPDATED)){
                     //拿到數(shù)據(jù)
                    byte[] data = pathChildrenCacheEvent.getData().getData();
                    System.out.println(data);
                }
            }
        });
        //開啟監(jiān)聽
        pathChildrenCache.start();
        while (true){
        }
    }
    /**
     * TreeCache:監(jiān)聽節(jié)點自己和所有子節(jié)點們
     */
    @Test
    public void testTreeCache(){
        //1.創(chuàng)建監(jiān)聽器
        TreeCache treeCache = new TreeCache(curatorFramework, "/dongwuyuan");
        //2.注冊監(jiān)聽
        treeCache.getListenable().addListener(new TreeCacheListener() {
            @Override
            public void childEvent(CuratorFramework client, TreeCacheEvent event) throws Exception {
                System.out.println("節(jié)點變化了");
                System.out.println(event);
            }
        });
        //開啟監(jiān)聽
        try {
            treeCache.start();
            while (true){
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @After
    public void close() {
        if (curatorFramework != null) {
            curatorFramework.close();
        }
    }
}

到此這篇關(guān)于Curator實現(xiàn)zookeeper的節(jié)點監(jiān)聽詳解的文章就介紹到這了,更多相關(guān)zookeeper節(jié)點監(jiān)聽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中的OPT算法實現(xiàn)方式

    java中的OPT算法實現(xiàn)方式

    這篇文章主要介紹了java中的OPT算法實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • SpringBoot集成Redis使用Cache緩存的實現(xiàn)方法

    SpringBoot集成Redis使用Cache緩存的實現(xiàn)方法

    SpringBoot通過配置RedisConfig類和使用Cache注解可以輕松集成Redis實現(xiàn)緩存,主要包括@EnableCaching開啟緩存,自定義key生成器,改變序列化規(guī)則,以及配置RedisCacheManager,本文為使用SpringBoot與Redis處理緩存提供了詳實的指導(dǎo)和示例,感興趣的朋友一起看看吧
    2024-10-10
  • @TableName注解和@Table的區(qū)別及說明

    @TableName注解和@Table的區(qū)別及說明

    這篇文章主要介紹了@TableName注解和@Table的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 深入理解HashMap各個方法的源碼

    深入理解HashMap各個方法的源碼

    這篇文章主要介紹了深入理解HashMap各個方法的源碼,HashMap初始容量不能為負(fù)數(shù),若初始容量大于最大容量,則讓它等于最大容量,負(fù)載因子必須大于0,并且傳入的initialCapacity不是HashMap的容量大小,需要的朋友可以參考下
    2023-12-12
  • mybatisPlus中apply的使用以進(jìn)行聯(lián)表等復(fù)雜sql語句詳解

    mybatisPlus中apply的使用以進(jìn)行聯(lián)表等復(fù)雜sql語句詳解

    在MyBatis-Plus中,`apply()`方法可以用于添加任意的SQL片段,包括聯(lián)表查詢,使用`apply()`方法的好處是可以直接添加原生的SQL片段,而不受MyBatis-Plus提供的常規(guī)查詢條件構(gòu)建方法的限制,但是,使用`apply()`方法需要注意安全性和性能問題
    2025-03-03
  • Java枚舉_動力節(jié)點Java學(xué)院整理

    Java枚舉_動力節(jié)點Java學(xué)院整理

    enum 的全稱為 enumeration, 是 JDK 5 中引入的新特性,存放在 java.lang 包中。這篇文章給大家介紹Java枚舉相關(guān)知識,需要的的朋友參考下
    2017-04-04
  • Java Set集合的遍歷及實現(xiàn)類的比較

    Java Set集合的遍歷及實現(xiàn)類的比較

    這篇文章主要介紹了Java Set集合的遍歷及實現(xiàn)類的比較的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Spring學(xué)習(xí)之依賴注入的方法(三種)

    Spring學(xué)習(xí)之依賴注入的方法(三種)

    本篇文章主要介紹了Spring學(xué)習(xí)之依賴注入的方法(三種),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Eclipse+Java+Swing+Mysql實現(xiàn)電影購票系統(tǒng)(詳細(xì)代碼)

    Eclipse+Java+Swing+Mysql實現(xiàn)電影購票系統(tǒng)(詳細(xì)代碼)

    這篇文章主要介紹了Eclipse+Java+Swing+Mysql實現(xiàn)電影購票系統(tǒng)并附詳細(xì)的代碼詳解,需要的小伙伴可以參考一下
    2022-01-01
  • java使用多線程找出最大隨機(jī)數(shù)

    java使用多線程找出最大隨機(jī)數(shù)

    這篇文章主要為大家詳細(xì)介紹了java使用多線程找出最大隨機(jī)數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07

最新評論