zoukankan      html  css  js  c++  java
  • ZookeeperclientAPI之创建会话(六)

    Zookeeper对外提供了一套Java的clientAPI。

    本篇博客主要讲一下创建会话。

    创建项目

    首选,创建一个基于maven管理的简单javaproject。在pom文件里引入zookeeper。

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

    编写測试类

    首选以最简单的API为例。

    public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)

    当中。connectString表示要连接的zookeeperserver地址列表。格式为:192.168.0.1:2181。

    支持多个地址拼接,中间用逗号分隔。当中地址后面还能够拼接上zookeeper的操作路径,比方:192.168.0.1:2181/zk/test。

    sessionTimeout:会话超时时间,单位“毫秒”。通过心跳来监測会话的有效性。

    watcher:监听节点的状态变化,假设发生变化则通知此watcher,做出对应处理。假设不须要监听,则可设置为null。

    測试代码:

    package com.secbro.learn;
    
    import org.apache.zookeeper.WatchedEvent;
    import org.apache.zookeeper.Watcher;
    import org.apache.zookeeper.ZooKeeper;
    
    import java.io.IOException;
    import java.util.Date;
    import java.util.concurrent.CountDownLatch;
    
    /**
     * Created by zhuzs on 2017/3/9.
     */
    public class TestSession implements Watcher{
    
        private static CountDownLatch countDownLatch = new CountDownLatch(1);
        public static void main(String[] args) throws IOException {
            Long startTime = new Date().getTime();
            ZooKeeper zooKeeper = new ZooKeeper("192.168.0.1:2181",5000,new TestSession());
            try {
                countDownLatch.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("创建连接花费时间:" + (new Date().getTime() - startTime) + "ms");
            System.out.println("连接状态:" + zooKeeper.getState());
        }
    
        public void process(WatchedEvent event) {
            System.out.println("Receive watcher event:" + event);
            if(Event.KeeperState.SyncConnected == event.getState()){
                countDownLatch.countDown();
            }
        }
    }
    

    因为Zookeeperclient和server创建会话是异步过程。因此使用CountDownLatch来堵塞线程,等待server创建完毕,并发送事件通知。

    打印结果为:

    Receive watcher event:WatchedEvent state:SyncConnected type:None path:null
    创建连接花费时间:9155ms
    连接状态:CONNECTED

    其它接口

    public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher,
                boolean canBeReadOnly)

    此方法多了一个canBeReadOnly參数。此參数表示当前会话是否支持“仅仅读”模式。

    public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher,
                long sessionId, byte[] sessionPasswd)

    此方法同意传入sessionId和sessionPasswd,目的是为了反复使用会话。通过下面方法获得:

    zooKeeper.getSessionId();
    zooKeeper.getSessionPasswd()

    然后作为參数创建新的连接。

    当sessionId和sessionPasswd不对时,server会返回Expired事件。

  • 相关阅读:
    二维数组最大子数组算法
    寻找最大子数组
    最大值bug 调试
    多路电梯调度算法
    分析一个文本文件各个词出现的频率,并把频率最高的十个词打印出来。
    使用redis实现生产者消费者模式
    简单使用redis实现sso单点登录
    MongoDB批量导入及简单的性能优化
    mysql安装
    字符串操作性能优化
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7272638.html
Copyright © 2011-2022 走看看