天天看點

JAVA API利用Curator操作ZooKeeper

JAVA API利用Curator操作ZooKeeper

相容性問題

Curator 4.0對ZooKeeper 3.5.x有很強的依賴性如果您使用的是ZooKeeper 3.5.x,則無需執行任何操作 - 隻需使用Curator 4.0即可。對ZooKeeper 3.4.x也是相容的,但是你必須在maven依賴中排除 zookeeper依賴包,如下:

<dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.0.0</version>
            <!-- 4.0.0原生不相容zk 3.4, 必須進行相容性處理 -->
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
           
增删改查操作

pom.xml配置如下

<?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>

    <groupId>com.gohb</groupId>
    <artifactId>zk_test</artifactId>
    <version>1.0-SNAPSHOT</version>


    <dependencies>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.12</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.0.0</version>
            <!-- 4.0.0原生不相容zk 3.4, 必須進行相容性處理 -->
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
    </dependencies>

</project>
           

測試

package com.gohb;

import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.data.Stat;

import org.junit.Test;

public class test {

    private String connectString="192.168.91.145:2181,192.168.91.146:2181,192.168.91.147:2181";



    /**
     * 建立節點
     * CreateMode.EPHEMERAL;
     * CreateMode.EPHEMERAL_SEQUENTIAL;
     * CreateMode.PERSISTENT;
     * CreateMode.PERSISTENT_SEQUENTIAL;
     * @Author gohb
     */
    @Test
    public void createNode()throws Exception{
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(2000,30000);
        CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient(connectString,retryPolicy);
        curatorFramework.start();
        curatorFramework.create().
                creatingParentsIfNeeded().//遞歸建立,如果沒有父節點,自動建立父節點
                withMode(CreateMode.PERSISTENT).//設定節點類型
                withACL(ZooDefs.Ids.OPEN_ACL_UNSAFE).
                forPath("/child1","child1".getBytes());
        curatorFramework.close();
    }

    /**
     * 擷取節點
     * @Author: gohb
     */
    @Test
    public void getNode()throws Exception{
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(2000,30000);
        CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient(connectString,retryPolicy);
        curatorFramework.start();

        byte[] data = curatorFramework.
                getData().
                forPath("/child1");
        System.out.println("節點資料為"+new String(data));


        curatorFramework.getData().usingWatcher(new Watcher() {
            public void process(WatchedEvent watchedEvent) {
                System.out.println("watch機制觸發"+watchedEvent);
            }
        });

        curatorFramework.close();
    }

    /**
     * 設定節點
     * @Author: gohb
     */
    @Test
    public void SetNode()throws Exception{
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(2000,30000);
        CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient(connectString,retryPolicy);
        curatorFramework.start();
        Stat stat = curatorFramework.setData().
                            withVersion(-1).
                            forPath("/child1", "child1 change data".getBytes());
        System.out.println("修改後版本為"+stat.getVersion());
        curatorFramework.close();
    }

    /**
     * 删除節點
     * @Author: gohb
     */
    @Test
    public void deleteNode()throws Exception{
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(2000,30000);
        CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient(connectString,retryPolicy);
        curatorFramework.start();
        curatorFramework.delete().deletingChildrenIfNeeded().forPath("/child1");
        curatorFramework.close();
    }


}