前提: 1.虚拟机之间互通。 2.windows环境的host域名解析配置完成 C:\WINDOWS\system32\drivers\etc\host 3.java引入以下maven jar包
<dependencies> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>com.google.collections</groupId> <artifactId>google-collections</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>RELEASE</version> <!-- test:只在测试时使用,不打包 provided:仅在开发环境使用,不打包 compile:默认,开发环境要,打包也要 --> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <!-- java编译插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>
---------------------------------------以下为具体代码------------------------- package cn.itcast_zk.demo01; import org.apache.curator.RetryPolicy; import org.apache.curator.RetrySleeper; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.recipes.cache.ChildData; import org.apache.curator.framework.recipes.cache.TreeCache; import org.apache.curator.framework.recipes.cache.TreeCacheEvent; import org.apache.curator.framework.recipes.cache.TreeCacheListener; import org.apache.curator.retry.ExponentialBackoffRetry; import org.apache.zookeeper.CreateMode; import org.junit.jupiter.api.Test; public class zkOperate { @Test public void createNode() throws Exception { //创建一个客户连接 RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,2); CuratorFramework client = CuratorFrameworkFactory.newClient("node01:2181,node02:2181,node03:2181",retryPolicy); //启动连接 client.start(); //这个客户递归创建一个节点,节点类型为永久,路径为/java_node_test01/hello,内容为asdb client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath("/java_node_test01/hello","asdb".getBytes()); //结束 client.close(); } @Test public void createNode2() throws Exception { RetryPolicy retryPolicy = new ExponentialBackoffRetry(100000,2); CuratorFramework client = CuratorFrameworkFactory.newClient("node01:2181,node02:2181,node03:2181",retryPolicy); client.start(); //这个客户递归创建一个节点,节点类型为临时,路径为/java_node_test01/hello,内容为asdb client.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath("/java_node_test02/hello"); Thread.sleep(5000); client.close(); } @Test public void updateNode() throws Exception { RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,2); CuratorFramework client = CuratorFrameworkFactory.newClient("node01:2181,node02:2181,node03:2181",retryPolicy); client.start(); //这个客户递归设置/java_node_test01的值为test client.setData().forPath("/java_node_test01","test".getBytes()); client.close(); } @Test public void delteNode() throws Exception { RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,2); CuratorFramework client = CuratorFrameworkFactory.newClient("node01:2181,node02:2181,node03:2181",retryPolicy); client.start(); client.delete().forPath("/java_node_test01"); client.close(); } @Test public void getNode() throws Exception { RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,2); CuratorFramework client = CuratorFrameworkFactory.newClient("node01:2181,node02:2181,node03:2181",retryPolicy); client.start(); //获取节点的值 byte[] bs = client.getData().forPath("/java_node_test01"); System.out.println(new String(bs)); client.close(); } @Test public void watch() throws Exception { RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,2); CuratorFramework client = CuratorFrameworkFactory.newClient("node01:2181,node02:2181,node03:2181",retryPolicy); client.start(); //创建一个节点的监听,此监听不是一次性的,用完会自动再次注册 TreeCache treeCache = new TreeCache(client,"/"); //重写监听的方法,注意入参CuratorFramework client, TreeCacheEvent even,和入参的方法getData();getType(); treeCache.getListenable().addListener(new TreeCacheListener() { @Override public void childEvent(CuratorFramework client, TreeCacheEvent even) throws Exception { ChildData data = even.getData(); if(data != null){ System.out.println(even.getType()); switch ( even.getType()){ case NODE_ADDED: System.out.println("节点增加内容是:"+new String(data.getData())+";路径是:"+data.getPath()); break; case NODE_UPDATED: System.out.println("NODE_UPDATED : "+ data.getPath() +" 数据:"+ new String(data.getData())); break; case NODE_REMOVED: System.out.println("NODE_REMOVED : "+ data.getPath() +" 数据:"+ new String(data.getData())); break; default: break; } }else { System.out.println("data is null : "+ even.getType()); } } }); //启动监听 treeCache.start(); //当前线程休眠待机 Thread.sleep(500000); client.close(); } }