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事件。

ZookeeperclientAPI之创建会话(六)的更多相关文章

  1. phpMyAdmin:无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装。

    一:错误提示 英文:Cannot start session without errors, please check errors given in your PHP and/or webserve ...

  2. kafka创建会话,报Error while executing topic command : Replication factor: 1 larger than available brokers: 0.

     bin/kafka-topics.sh --create --zookeeper es1:2181 --replication-factor 1 --partitions 1 --topic top ...

  3. phpMyAdmin提示“无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装。”

    这是以前学生在使用phpwamp时遇到的一个问题(其他环境或是自己搭建时遇到此问题,解决方式同理) 其实这个问题与PHPWAMP本身无关,是电脑设置的问题,一般正常情况下不会出现这个问题. 现在把学生 ...

  4. Tensorflow创建会话,启动会话

    import tensorflow as tf #定义一个常量 m1=tf.constant([[,]])#这是一个一行两列的数据 print(m1) m2=tf.constant([[],[]]) ...

  5. Zookeeper开源客户端Curator之创建会话

    前面Zookeeper的链接使用的都是其提供的原生代码,实际开发过程中非常底层的细节开发工作如连接重连,反复注册等耗费开发人员大量的工作精力并且重复工作.而开源客户端Curator的出现解决了该类问题 ...

  6. 12. ZooKeeper之Java客户端API使用—创建会话。

    转自:https://blog.csdn.net/en_joker/article/details/78686649 客户端可以通过创建一个ZooKeeper(org.apache.zookeeper ...

  7. 创建JDBC六个步骤

    JDBC库中所包含的API通常与数据库使用于: 连接到数据库 创建SQL或MySQL语句 在数据库中执行SQL或MySQL查询 查看和修改数据库中的数据记录 创建JDBC应用程序 建立一个JDBC应用 ...

  8. Spark RDD概念学习系列之RDD的创建(六)

    RDD的创建  两种方式来创建RDD: 1)由一个已经存在的Scala集合创建 2)由外部存储系统的数据集创建,包括本地文件系统,还有所有Hadoop支持的数据集,比如HDFS.Cassandra.H ...

  9. 【Cocos2d-X游戏实战开发】捕鱼达人之游戏场景的创建(六)

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为cocos2d-x-2.1.5)    博主发现前两个系列的学习教程被严重抄袭,在这里呼吁大家请尊重开发者的劳动成果, 转载的时候请务必注 ...

随机推荐

  1. luogu P1651 塔

    题目描述 小明很喜欢摆积木,现在他正在玩的积木是由N个木块组成的,他想用这些木块搭出两座高度相同的塔,一座塔的高度是搭建它的所有木块的高度和,并且一座塔至少要用一个木块.每个木块只能用一次,也可以不用 ...

  2. 2013年9月29日 iOS 周报

    新闻 Apple Tech Talks 2013 在中国上海的iOS Tech Talks活动将于11月12日展开,活动主要针对iOS 7.活动分为App开放日和游戏开放日,主要内容可查看链接.当你看 ...

  3. 【java】java处理随机浮点数(小数点后两位)用RMB的大写数值规则输出

    晚上上床前,拿到这个有意思的问题,就想玩弄一番: =========================================================================== ...

  4. 对象第复制operator=

    类机制中有默认的对象复制操作符=,自定义对象复制需要注意一个问题,如果有遇到指针指向的资源是需要释放的,这时需要毫不留情释放,否则内存空间的泄露就不可避免.复制操作与拷贝构造函数的参数是一致的,只是在 ...

  5. JVM技术部分总结

    1.JVM内存模型 1.1 JVM内存模型图解 Java虚拟机在执行Java程序的过程中,会把它所管理的内存划分为若干个不同的数据区.这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程 ...

  6. 2017.3.14 activiti实战--第二十章--REST服务

    学习资料:<Activiti实战> 第二十章 REST服务 20.1 通信协议概述 略. 20.2 REST API概述 资源分类 资源基础URI 说明 Deployments manag ...

  7. 2016.10.10 Failed to start component [StandardService[Catalina]]

    Failed to start component [StandardService[Catalina]] 错误原因:有数据残留,点击clean(见下图)     解决办法: 右键点击servers下 ...

  8. maven仓库中有jar包pom还报错

    maven仓库中有jar包pom还报错 就报错,咋啦? 这个包来源不明,自己拷贝进来的吧?你当我mvn是傻子?我要去网上验证一下: 我自己有个_remote.respositories文件,如果自己用 ...

  9. 转: maven打可执行的jar包以及classpath设置

    from:  http://drizzlewalk.blog.51cto.com/2203401/416508

  10. HM编码器代码阅读(14)——帧间预測之AMVP模式(二)predInterSearch函数

    简单介绍     predInterSearch基本的工作是ME(运动预计)和MC(运动补偿).     函数中有一个bTestNormalMC变量.它表示是否进行正常的MC过程,正常的MC过程就是进 ...