Zookeeper实例原生API--复用sessionId和sessionPasswd

来源:互联网 发布:算王算量软件破解版 编辑:程序博客网 时间:2024/06/08 09:10


import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.Watcher.Event.KeeperState;import org.apache.zookeeper.ZooKeeper;/** * * @ClassName: ZooKeeper_Constructor_Usage_With_SID_PASSWD * @Description: TODO(Java API -> 创建连接 -> 创建一个最基本的ZooKeeper对象实例,复用sessionId和) * @author RongShu* @date 2017年6月11日 下午8:25:09 * */public class ZooKeeper_Constructor_Usage_With_SID_PASSWD implements Watcher {    private static CountDownLatch connectedSemaphore = new CountDownLatch(1);    public static void main(String[] args) throws Exception{        ZooKeeper zookeeper = new ZooKeeper("localhost:2181",5000,new ZooKeeper_Constructor_Usage_With_SID_PASSWD());        connectedSemaphore.await();        long sessionId = zookeeper.getSessionId();        byte[] passwd  = zookeeper.getSessionPasswd();        //Use illegal sessionId and sessionPassWd        zookeeper = new ZooKeeper("localhost:2181", 5000,new ZooKeeper_Constructor_Usage_With_SID_PASSWD(),1l,"test".getBytes());        //Use correct sessionId and sessionPassWd        zookeeper = new ZooKeeper("localhost:2181", 5000, new ZooKeeper_Constructor_Usage_With_SID_PASSWD(),sessionId,passwd);        Thread.sleep( Integer.MAX_VALUE );    }    public void process(WatchedEvent event) {        System.out.println("Receive watched event:" + event);        if (KeeperState.SyncConnected == event.getState()) {            connectedSemaphore.countDown();        }    }}输出Receive watched event:WatchedEvent state:SyncConnected type:None path:nullReceive watched event:WatchedEvent state:Expired type:None path:nullReceive watched event:WatchedEvent state:SyncConnected type:None path:null

注意:

客户端传入sessionId和sessionPasswd的目的是为了复用会话,以维持之前会话的有效性。

第一次使用了错误的sessionId和sessionPasswd来创建Zookeeper客户端实例,结果客户端接收到服务端的Expired事件通知;而第二次使用了正确的sessionId和sessionPasswd来创建客户端实例,结果链接成功。

参考

1.《从Paxos到Zookeeper:分布式一致性原理与实践》

2.https://zookeeper.apache.org/doc/r3.5.3-beta/javaExample.html


原创粉丝点击