• Good Zookeeper Tutorial with Java client


    参考: https://stackoverflow.com/questions/33524537/good-zookeeper-tutorial-with-java-client

    I was trying to use Zookeeper in our project. Could run the server..Even test it using zkcli.sh .. All good.. But couldn't find a good tutorial for me to connect to this server using Java ! All I need in Java API is a method

    -----------------------------------------

    Finally, this is the simplest and most basic program I came up with which will help you with ZooKeeper "Getting Started":

    package com.fly.app;
    
    import java.util.Date;
    import java.util.List;
    import java.util.concurrent.CountDownLatch;
    
    import org.apache.zookeeper.CreateMode;
    import org.apache.zookeeper.WatchedEvent;
    import org.apache.zookeeper.Watcher;
    import org.apache.zookeeper.Watcher.Event.KeeperState;
    import org.apache.zookeeper.ZooDefs.Ids;
    import org.apache.zookeeper.ZooKeeper;
    
    public class ZkConnect {
        private ZooKeeper zk;
        private CountDownLatch connSignal = new CountDownLatch(0);
    
        //host should be 127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002
        public ZooKeeper connect(String host) throws Exception {
            zk = new ZooKeeper(host, 3000, new Watcher() {
                public void process(WatchedEvent event) {
                    if (event.getState() == KeeperState.SyncConnected) {
                        connSignal.countDown();
                    }
                }
            });
            connSignal.await();
            return zk;
        }
    
        public void close() throws InterruptedException {
            zk.close();
        }
    
        public void createNode(String path, byte[] data) throws Exception
        {
            zk.create(path, data, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        }
    
        public void updateNode(String path, byte[] data) throws Exception
        {
            zk.setData(path, data, zk.exists(path, true).getVersion());
        }
    
        public void deleteNode(String path) throws Exception
        {
            zk.delete(path,  zk.exists(path, true).getVersion());
        }
    
        public static void main (String args[]) throws Exception
        {
            ZkConnect connector = new ZkConnect();
            ZooKeeper zk = connector.connect("54.169.132.0,52.74.51.0");
            String newNode = "/deepakDate"+new Date();
            connector.createNode(newNode, new Date().toString().getBytes());
            List<String> zNodes = zk.getChildren("/", true);
            for (String zNode: zNodes)
            {
               System.out.println("ChildrenNode " + zNode);   
            }
            byte[] data = zk.getData(newNode, true, zk.exists(newNode, true));
            System.out.println("GetData before setting");
            for ( byte dataPoint : data)
            {
                System.out.print ((char)dataPoint);
            }
    
            System.out.println("GetData after setting");
            connector.updateNode(newNode, "Modified data".getBytes());
            data = zk.getData(newNode, true, zk.exists(newNode, true));
            for ( byte dataPoint : data)
            {
                System.out.print ((char)dataPoint);
            }
            connector.deleteNode(newNode);
        }
    
    }
    

      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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.fly.app</groupId>
        <artifactId>new-app</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
        <name>new-app</name>
        <url>http://maven.apache.org</url>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.6</maven.compiler.source>
            <maven.compiler.target>1.6</maven.compiler.target>
    
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>3.8.1</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.4.6</version>
            </dependency>
        </dependencies>
    <build>
        <plugins>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <version>2.3.1</version>
               <configuration>
                   <source>1.8</source>
                   <target>1.8</target>
               </configuration>
           </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <descriptorRefs>
     </configuration>
                <executions>
                    <execution>
                       <id>make-assembly</id>
                       <phase>package</phase>
                       <goals>
                            <goal>single</goal>
                       </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
      </build>
    
    </project>
    

      编译后,运行的结果:

    项目的结构:

    执行 mvn clean 之后: 

    执行 mvn assembly:assembly 之后,编译后的结果为:

     两个jar包的内容是不一样的。

    java -cp target/new-app-0.0.1-SNAPSHOT-jar-with-dependencies.jar com.fly.app.ZkConnect 

    或者:java -cp target/new-app-0.0.1-SNAPSHOT.jar:/data/tools/zookeeper-3.4.11/lib/slf4j-api-1.6.1.jar:/data/tools/zookeeper-3.4.11/zookeeper-3.4.11.jar:/data/tools/zookeeper-3.4.11/lib/*.jar  com.fly.app.ZkConnect

  • 相关阅读:
    【LeetCode】41. First Missing Positive (3 solutions)
    【LeetCode】42. Trapping Rain Water
    【LeetCode】164. Maximum Gap (2 solutions)
    【原创】SQLServer将数据导出为SQL脚本的方法
    Jconsole远程监控tomcat 的JVM内存(linux、windows)
    selenium + python自动化测试环境搭建
    LR--Controller的Pacing设置(不容忽视的设置)
    loadrunner录制回放常见问题及解决办法
    修改windows系统文件权限
    TestNG官方文档中文版(4)-运行TestNG
  • 原文地址:https://www.cnblogs.com/oxspirt/p/7922522.html
Copyright © 2020-2023  润新知