1. 程式人生 > >開源客戶端Curator 使用(上)

開源客戶端Curator 使用(上)

一 介紹
Curator是Netflix公司開源的一款Zookeeper客戶端框架,Curator解決了很多Zookeeper客戶端非常底層的細節開發工作,包括連線重連、反覆註冊Watcher等,實現Fluent風格的API介面,目前已經成為Apache的頂級專案,是全世界範圍內使用最廣泛的Zookeeper客戶端之一。


二 編輯pom.xml
<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.0http://maven.apache.org/xsd/maven-4.0.0.xsd";>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.cakin</groupId>
  <artifactId>zookerper</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>zookerper</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
     <dependency>
         <groupId>org.apache.zookeeper</groupId>
         <artifactId>zookeeper</artifactId>
         <version>3.4.6</version>
     </dependency>
     <dependency>
         <groupId>com.101tec</groupId>
         <artifactId>zkclient</artifactId>
         <version>0.5</version>
     </dependency>
     <dependency>
         <groupId>org.apache.curator</groupId>
         <artifactId>curator-framework</artifactId>
         <version>2.8.0</version>
     </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
三 新建Createcuratorsession類
1 程式碼
package com.cakin.zookerper;
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.curator.retry.RetryNTimes;
import org.apache.curator.retry.RetryUntilElapsed;
public class Createcuratorsession {
     public static void main(String[] args) throws InterruptedException {;
           //RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
           //RetryPolicy retryPolicy = new RetryNTimes(5, 1000)
           RetryPolicy retryPolicy = new RetryUntilElapsed(5000, 1000);
//         CuratorFramework client = CuratorFrameworkFactory
//                   .newClient("192.168.0.110:2181",5000,5000, retryPolicy);
           CuratorFramework client = CuratorFrameworkFactory
                     .builder()
                     .connectString("192.168.0.110:2181")
                     .sessionTimeoutMs(5000)
                     .connectionTimeoutMs(5000)
                     .retryPolicy(retryPolicy)
                     .build();
           client.start();
           Thread.sleep(Long.MAX_VALUE);
     }
}
四 新建CreatecuratorNode類
1 程式碼
package com.cakin.zookerper;
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.curator.retry.RetryNTimes;
import org.apache.curator.retry.RetryUntilElapsed;
import org.apache.zookeeper.CreateMode;
public class CreatecuratorNode {
    public static void main(String[] args) throws Exception {;
        //RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
        //RetryPolicy retryPolicy = new RetryNTimes(5, 1000)
        RetryPolicy retryPolicy = new RetryUntilElapsed(5000, 1000);
//        CuratorFramework client = CuratorFrameworkFactory
//                .newClient("192.168.0.110:2181",5000,5000, retryPolicy);
        CuratorFramework client = CuratorFrameworkFactory
                .builder()
                .connectString("192.168.0.110:2181")
                .sessionTimeoutMs(5000)
                .connectionTimeoutMs(5000)
                .retryPolicy(retryPolicy)
                .build();
        client.start();
        
        String path = client.create()
                .creatingParentsIfNeeded()
                .withMode(CreateMode.EPHEMERAL)
                .forPath("/cakin/2", "123".getBytes());
        
        System.out.println(path);
        Thread.sleep(Long.MAX_VALUE);
    }
}
2 測試結果
/cakin/2

五 新建DelcuratorNode類
1 程式碼
package com.cakin.zookerper;
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.curator.retry.RetryNTimes;
import org.apache.curator.retry.RetryUntilElapsed;
import org.apache.zookeeper.CreateMode;
public class DelcuratorNode {
    public static void main(String[] args) throws Exception {;
        //RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
        //RetryPolicy retryPolicy = new RetryNTimes(5, 1000)
        RetryPolicy retryPolicy = new RetryUntilElapsed(5000, 1000);
//        CuratorFramework client = CuratorFrameworkFactory
//                .newClient("192.168.0.110:2181",5000,5000, retryPolicy);
        CuratorFramework client = CuratorFrameworkFactory
                .builder()
                .connectString("192.168.0.110:2181")
                .sessionTimeoutMs(5000)
                .connectionTimeoutMs(5000)
                .retryPolicy(retryPolicy)
                .build();
        client.start();
        
        client.delete().guaranteed().deletingChildrenIfNeeded().withVersion(-1).forPath("/test5");
        
        Thread.sleep(Long.MAX_VALUE);
    }
}
2 測試結果
執行程式後,節點被刪除

六 新建Delcuratorgetsubnode類
1 程式碼
package com.cakin.zookerper;
import java.util.List;
import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.RetryUntilElapsed;
public class Delcuratorgetsubnode {
     public static void main(String[] args) throws Exception {;
           //RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
           //RetryPolicy retryPolicy = new RetryNTimes(5, 1000)
           RetryPolicy retryPolicy = new RetryUntilElapsed(5000, 1000);
//         CuratorFramework client = CuratorFrameworkFactory
//                   .newClient("192.168.0.110:2181",5000,5000, retryPolicy);
           CuratorFramework client = CuratorFrameworkFactory
                     .builder()
                     .connectString("192.168.0.110:2181")
                     .sessionTimeoutMs(5000)
                     .connectionTimeoutMs(5000)
                     .retryPolicy(retryPolicy)
                     .build();
           client.start();
           List<String> clist = client.getChildren().forPath("/FirstZnode");
           System.out.println(clist.toString());
           Thread.sleep(Long.MAX_VALUE);
     }
}
2 測試結果
[node4, node2, node3, node1]

七 新建curatorgetdate類
1 程式碼
package com.cakin.zookerper;
import java.util.List;
import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.RetryUntilElapsed;
import org.apache.zookeeper.data.Stat;
public class curatorgetdate {
    public static void main(String[] args) throws Exception {;
        //RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
        //RetryPolicy retryPolicy = new RetryNTimes(5, 1000)
        RetryPolicy retryPolicy = new RetryUntilElapsed(5000, 1000);
//        CuratorFramework client = CuratorFrameworkFactory
//                .newClient("192.168.0.110:2181",5000,5000, retryPolicy);
        CuratorFramework client = CuratorFrameworkFactory
                .builder()
                .connectString("192.168.0.110:2181")
                .sessionTimeoutMs(5000)
                .connectionTimeoutMs(5000)
                .retryPolicy(retryPolicy)
                .build();
        client.start();
        
        Stat stat = new Stat();
        byte[] ret =client.getData().storingStatIn(stat).forPath("/cakin");
        System.out.println(new String(ret));
        System.out.println(stat);
        Thread.sleep(Long.MAX_VALUE);
    }
}
2 測試結果
data
42949672981,42949673000,1515239231022,1515245251092,1,4,0,0,4,0,42949672994

八 參考
http://www.jikexueyuan.com/course/2063_3.html?ss=1