zoukankan      html  css  js  c++  java
  • 聊聊、Zookeeper API

     今天我们来说说 Zookeeper 客户端启动,整个文章分三个部分:第一部分是 Zookeeper 原生 API 客户端,第二部分是开源客户端 ZkClient,第三部分是开源客户端 Curator。

     【Zookeeper API】  

    <dependency>
    	<groupId>org.apache.zookeeper</groupId>
    	<artifactId>zookeeper</artifactId>
    	<version>3.4.10</version>
    </dependency>
    

      

     创建会话

    •  new ZooKeeper(String connectString,int sessionTimeOut,Watcher watcher)
    •  new ZooKeeper(String connectString,int sessionTimeOut,Watcher watcher,boolean canBeReadOnly)
    •  new ZooKeeper(String connectString,int sessionTimeOut,Watcher watcher,long sessionId,byte[] sessionPasswd)
    •  new ZooKeeper(String connectString,int sessionTimeOut,Watcher watcher,long sessionId,byte[] sessionPasswd,boolean canBeReadOnly)
    •  上面四个构造函数都可以创建会话,不同的在于构造参数。
    •  connectString 就是 host:port 字符串,例如 127.0.0.1:2181,也可以是多个,192.168.0.10:2181,192.168.0.11:2181,192.168.0.12:2181,多个地址表示集群。我们也可以指定到根目录,例如 192.168.0.10:2181/test,这样 Zookeeper服务连接后,所有的操作是针对 test 根目录。
    •  sessionTimeOut 就是会话超时时间,单位是毫秒。如果在会话超时时间内没有检查到心跳,则会话失效。
    •  watcher 就是监听器,也可以说是通知,如果传给构造函数 watcher 不为空,则会话创建成功后会有通知到客户端。收到通知后,客户端可以做一些事情。但是 watcher 的生命周期很短,通知一次过后就失效了,需要反复的注册。
    •  canBeReadOnly 是一个 boolean 类型,如果是 true,则当 Zookeeper 服务器故障,服务器还可以提供读服务。
    •  sessionId 就是会话序列号,sessionPasswd 就是会话密码,它们的作用就是会话复用,可以达到恢复会话作用。

     

     创建节点

    •  String create(final String path,byte data[],List<ACL> acl,CreateMode createMode)
    •  void create(final String path,byte data[],List<ACL> acl,CreateMode createMode,StringCallback cb,Object ctx)
    •  path 就是要创建的节点路径,例如 /app,在根节点 / 下创建 app 节点。
    •  data[] 就是节点内容,字节数组形式。
    •  acl 就是节点 ACL 策略。
    •  createMode 就是节点类型,分为持久,持久顺序,临时,临时顺序。
    •  cb 就是异步回调方法。实现 StringCallback 接口即可。
    •  ctx 用于传递一个对象,一般是上下文信息。

     

    package zookeeper.client;
    
    import java.io.IOException;
    import java.util.concurrent.CountDownLatch;
    import org.apache.zookeeper.CreateMode;
    import org.apache.zookeeper.KeeperException;
    import org.apache.zookeeper.WatchedEvent;
    import org.apache.zookeeper.Watcher;
    import org.apache.zookeeper.Watcher.Event.EventType;
    import org.apache.zookeeper.ZooDefs.Ids;
    import org.apache.zookeeper.ZooKeeper;
    import org.apache.zookeeper.Watcher.Event.KeeperState;
    
    public class ZKClient {
    	
    	private static CountDownLatch down = new CountDownLatch(1);
    	
    	private ZooKeeper zk;
    	
    	public void getNode(){
    		String path = "/";
    		try {
    			zk = new ZooKeeper("127.0.0.1:2181", 5000, new MyWatcher());
    			down.await();
    			zk.create(path+"app", "hello".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);			
    		} catch (IOException e) {
    			e.printStackTrace();
    		} catch (Exception e) {
    			e.printStackTrace();
    		} 
    	}
    	
    	class MyWatcher implements Watcher{
    		public void process(WatchedEvent e) {
    			if(KeeperState.SyncConnected == e.getState()){
    				System.out.println("SyncConnected");
    				if(EventType.None == e.getType() && null == e.getPath()){
    					down.countDown();
    				}else if(e.getType() == EventType.NodeChildrenChanged){
    					try {
    						System.out.println("NodeChildrenChanged"+zk.getChildren("/", true));
    					} catch (KeeperException e1) {
    						e1.printStackTrace();
    					} catch (InterruptedException e1) {
    						// TODO Auto-generated catch block
    						e1.printStackTrace();
    					}
    				}
    			}
    			
    		}
    		
    	}
    
    }
    

      

     

     删除节点

    •  public void delete(final String path,int version)
    •  public void delete(final String path,int version,VoidCallback cb,Object ctx)
    •  path 就是要删除的节点路径。
    •  version 就是节点版本号。
    •  cb 就是回调方法。
    •  ctx 就是传递上下文信息对象。

     读取节点

     (一)、getChildren 获取一个节点所有子节点。

    •  List<String> getChildren(final String path,Watcher watcher)
    •  List<String> getChildren(final String path,boolean watcher)
    •  void getChildren(final String path,Watcher watcher,ChildrenCallback cb,Object ctx)
    •  void getChildren(final String path,boolean watcher,ChildrenCallback cb,Object ctx) 
    •  List<String> getChildren(final String path,Watcher watcher,Stat stat)
    •  List<String> getChildren(final String path,boolean watcher,Stat stat)

     (二)、getData 获取一个节点内容。

    •  byte[] getData(final String path,Watcher watcher,Stat stat)
    •  byte[] getData(final String path,boolean watcher,Stat stat)
    •  void getData(final String path,Watcher watcher,DataCallback cb,Object ctx)
    •  void getData(final String path,boolean watcher,DataCallback cb,Object ctx)
    •  stat 就是节点的状态信息。包括 cZxid、mZxid,pZxid等。

     更新节点

    • Stat setData(final String path,byte data[],int version)
    • void setData(final String path,byte data[],int version,StatCallback cb,Object ctx) 

     检测节点是否存在

    • public Stat exists(final String path,Watcher watcher)
    • public Stat exists(final String path,boolean watch)
    • public void exists(final String path,Watcher watcher,StatCallback cb,Object ctx)
    • public void exists(final String path,boolean watch,StatCallback cb,Object ctx)

      谢谢大家观看!

  • 相关阅读:
    学习记录18
    学习记录17
    学习记录16
    小白的心酸连网历程
    学习记录15
    学习记录14
    学习记录13
    学习记录12
    学习记录10
    语法糖
  • 原文地址:https://www.cnblogs.com/xums/p/7123551.html
Copyright © 2011-2022 走看看