Zookeeper(三)Spring整合Zookeeper【基礎操作篇】


一、引言

  前兩篇寫了一些概念性的和在服務器上操作的信息,那么這一篇我們來學習如何用Spring來對Zookeeper做一個整合。首先需要先簡單介紹一些Curator這個客戶端。

Curator

  Curator是Netflix公司開源的一套zookeeper客戶端框架,解決了很多Zookeeper客戶端非常底層的細節開發工作,包括基礎操作、連接與重連、反復注冊Watcher、分布式鎖等等。

二、干貨代碼搞起來~

POM

<!--引入Zookeeper依賴和curator客戶端【有夢想的肥宅】-->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>5.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.5.8</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>5.1.0</version>
        </dependency>

Zookeeper客戶端工具類

  我這里把初始化zk客戶端的代碼抽成了一個工具類來使用,減少重復代碼:

/**
 * Zookeeper客戶端工具類
 *
 * @author zhanghao
 * @date 2021/8/18
 */
public class ZookeeperClientUtil {

    /**
     * 獲取Curator客戶端 【有夢想的肥宅】
     */
    public static CuratorFramework getCuratorFramework() {

        //1、配置重試策略 5000:重試間隔 5:重試次數
        ExponentialBackoffRetry policy = new ExponentialBackoffRetry(5 * 1000, 5);

        //2、構造Curator客戶端
        CuratorFramework client = CuratorFrameworkFactory.builder().connectString("這里填寫自己zk的ip地址:2181")
                .connectionTimeoutMs(60 * 1000)
                .sessionTimeoutMs(60 * 1000)
                .retryPolicy(policy).build();

        //3、啟動客戶端
        client.start();

        //4、輸出信息
        System.out.println("zookeeper啟動成功,獲取到客戶端鏈接");
        return client;
    }
}

基礎操作測試類

  當前類用於測試一些基礎的zk操作,都是自己手打測試過的,直接拿走~

/**
 * 基礎操作測試類
 *
 * @author 有夢想的肥宅
 * @date 2021/8/18
 */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = CuratorBaseControlDemo.class)
public class CuratorBaseControlDemo {

    //創建節點【有夢想的肥宅】
    @Test
    public void testCreate() throws Exception {
        CuratorFramework curatorFramework = ZookeeperClientUtil.getCuratorFramework();
        curatorFramework.create().withMode(CreateMode.PERSISTENT).forPath("/nodeForJava", "this is value!".getBytes());
        System.out.println("=========【有夢想的肥宅】節點創建成功========");
    }

    //獲取節點值【有夢想的肥宅】
    @Test
    public void testGetData() throws Exception {
        CuratorFramework curatorFramework = ZookeeperClientUtil.getCuratorFramework();
        byte[] bytes = curatorFramework.getData().forPath("/nodeForJava");
        System.out.println("=========【有夢想的肥宅】獲取到的節點值:" + new String(bytes) + "========");
    }

    //更新節點值【有夢想的肥宅】
    @Test
    public void testSetData() throws Exception {
        CuratorFramework curatorFramework = ZookeeperClientUtil.getCuratorFramework();
        curatorFramework.setData().forPath("/nodeForJava", "changed!".getBytes());
        byte[] bytes = curatorFramework.getData().forPath("/nodeForJava");
        System.out.println("=========【有夢想的肥宅】更新后節點的值:" + new String(bytes) + "========");
    }

    //刪除節點【有夢想的肥宅】
    //PS:guaranteed() 強制刪除
    //PS:deletingChildrenIfNeeded() 刪除一個節點,並且遞歸刪除其所有的子節點
    @Test
    public void testDelete() throws Exception {
        CuratorFramework curatorFramework = ZookeeperClientUtil.getCuratorFramework();
        String pathWithParent = "/nodeForJava";
        curatorFramework.delete().guaranteed().deletingChildrenIfNeeded().forPath(pathWithParent);
        System.out.println("=========【有夢想的肥宅】已成功刪除節點:" + pathWithParent + "========");
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM