大数据学习之路41-zookeeper的客户端api基本使用及gson使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37050372/article/details/81939638

需要导入的jar包有:

其中netty是用来做NIO通信的jar包。

下面是代码:

package com.test.zookeeper;

import java.io.IOException;

import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooKeeper;

public class TestConnection {
  public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
	  //这里设置再多的机器也只会连接一台,但是,如果这台宕机了,就会切换到别的,这么写可以提高健壮性
   String hosts = "marshal:2181,marshal01:2181,marshal02:2181,marshal03:2181,marshal04:2181,marshal05:2181";
     //第二个参数为心跳时间,第三个参数为是否设置监听器
   ZooKeeper zk = new ZooKeeper(hosts,2000, null); 
   //这里的第二个参数为是否设置监听器,第三个参数为希望得到的数据的版本,
      //我们可以使用new Stat()或者直接传null就可以得到最新的版本号
   byte[] data = zk.getData("/aaa/bbb", false, null);
   System.out.println(new String(data));
   zk.close();
  }
}

成功截图:

创建节点:

public void createNode() throws KeeperException, InterruptedException, UnsupportedEncodingException {
		//第一个参数:路径就是key,第二个参数:数据就是value,
		//第三个参数:acl就是访问控制,第四个参数就是节点类型
		//Ids是一个枚举类型
		//Ids.OPEN_ACL_UNSAFE意思是开放权限,我们一般都选他
		//createMode也是一个枚举类型
		    /**
		     * 创建永久节点
		     */
		    //  String create = zk.create("/eclipse","eclipse是一个好东西".getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
	          //System.out.println(create);
	          
	        /**
	         * 创建临时节点
	         */
	        //  String create2 = zk.create("/shabi", "草泥马".getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
	        //  System.out.println(create2);
	       //   Thread.sleep(8000);
	         
	        /**
	         * 创建临时有序节点
	         */
	       //  String create3 = zk.create("/shabicaonima", "草泥马".getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
	       //  System.out.println(create3);
	       //  Thread.sleep(8000);
		/**
		 * 创建永久有序节点
		 */
		String create4 = zk.create("/shabi", "傻逼".getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
	    System.out.println(create4);   
		zk.close();
	}

删除节点:

public void deleteNode() throws InterruptedException, KeeperException{
		//-1表示删除这个数据的所有版本
		   zk.delete("/eclipse",-1);
		   zk.close();
	}

修改节点:

public void setData() throws KeeperException, InterruptedException{
		   Stat setData = zk.setData("/shabi0000000006", "大傻逼".getBytes(), -1);
		   byte[] data = zk.getData("/shabi0000000006", false, null);
		   System.out.println(setData);
		   System.out.println(new String(data));
		   zk.close();
	}

判断节点是否存在:

public void testExist() throws KeeperException, InterruptedException{
		   Stat stat = zk.exists("/zookeeper", false);
		   System.out.println(stat==null?"不存在":"存在");
		   zk.close();
	}

获取子节点:

public void testGetChildren() throws KeeperException, InterruptedException{
		   List<String> childrens = zk.getChildren("/zookeeper", false);
		   //返回的节点只有子节点的名称,不带全路径
		   for (String child : childrens) {
			    System.out.println(child);
		    }
		   zk.close();
	}

存储一个对象到zookeeper:

public void testObject() throws UnsupportedEncodingException, KeeperException, InterruptedException{
		    Person person = new Person();
		    person.setName("张三");
		    Gson gson = new Gson();
		    String json = gson.toJson(person);
		    String create = zk.create("/shabi", json.getBytes("utf-8"),Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
	        byte[] data = zk.getData("/shabi", false, null);
	        String data2 = new String(data);
	        Person p = gson.fromJson(data2, Person.class);
	        System.out.println(p.getName());
	        zk.close();
	}

猜你喜欢

转载自blog.csdn.net/qq_37050372/article/details/81939638