参考: 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