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事件。
ZookeeperclientAPI之创建会话(六)的更多相关文章
- phpMyAdmin:无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装。
一:错误提示 英文:Cannot start session without errors, please check errors given in your PHP and/or webserve ...
- 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 ...
- phpMyAdmin提示“无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装。”
这是以前学生在使用phpwamp时遇到的一个问题(其他环境或是自己搭建时遇到此问题,解决方式同理) 其实这个问题与PHPWAMP本身无关,是电脑设置的问题,一般正常情况下不会出现这个问题. 现在把学生 ...
- Tensorflow创建会话,启动会话
import tensorflow as tf #定义一个常量 m1=tf.constant([[,]])#这是一个一行两列的数据 print(m1) m2=tf.constant([[],[]]) ...
- Zookeeper开源客户端Curator之创建会话
前面Zookeeper的链接使用的都是其提供的原生代码,实际开发过程中非常底层的细节开发工作如连接重连,反复注册等耗费开发人员大量的工作精力并且重复工作.而开源客户端Curator的出现解决了该类问题 ...
- 12. ZooKeeper之Java客户端API使用—创建会话。
转自:https://blog.csdn.net/en_joker/article/details/78686649 客户端可以通过创建一个ZooKeeper(org.apache.zookeeper ...
- 创建JDBC六个步骤
JDBC库中所包含的API通常与数据库使用于: 连接到数据库 创建SQL或MySQL语句 在数据库中执行SQL或MySQL查询 查看和修改数据库中的数据记录 创建JDBC应用程序 建立一个JDBC应用 ...
- Spark RDD概念学习系列之RDD的创建(六)
RDD的创建 两种方式来创建RDD: 1)由一个已经存在的Scala集合创建 2)由外部存储系统的数据集创建,包括本地文件系统,还有所有Hadoop支持的数据集,比如HDFS.Cassandra.H ...
- 【Cocos2d-X游戏实战开发】捕鱼达人之游戏场景的创建(六)
本系列学习教程使用的是cocos2d-x-2.1.4(最新版为cocos2d-x-2.1.5) 博主发现前两个系列的学习教程被严重抄袭,在这里呼吁大家请尊重开发者的劳动成果, 转载的时候请务必注 ...
随机推荐
- 如何自学Android, 教大家玩爆Android
http://blog.csdn.net/xiaole0313/article/details/51714223 http://blog.csdn.net/xiaole0313/article/det ...
- ThinkPHP示例:模板主题
ThinkPHP示例之模板主题,模板主题可以对相同的控制器输出进行不同的布局和样式调整.首先需要下载框架核心,然后把示例解压到Web根目录下面,并修改入口文件中的框架入口文件的位置.访问 http:/ ...
- Importance sampling
用蒙特卡洛求解积分时 (Monte Carlo 随机采样对目标积分函数做近似) importance sampling func p(x) p(x)值大的地方,Monte Carlo多采几次 值小的地 ...
- npm使用指南
npm使用指南 作者:chszs,未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs npm介绍 npm全称为Node Package Man ...
- POJ 3254 Corn Fields 状态压缩
这题对我真的非常难.实在做不出来,就去百度了,搜到了一种状压DP的方法.这是第一种 详细见凝视 #include <cstdio> #include <cstring> #in ...
- 软件业的发展方向:云、Web以及App
随着行业互联网的发展,未来的软件发展方向是云技术.Web软件以及基于移动设备的Apps. 桌面软件主要负责大型的计算.渲染和消耗非常大CPU和内存的图形软件,以及基于这些软件的二次开发软件如Revit ...
- 4pda.ru注冊验证的解码算法
代码源于看雪林版在我群里介绍注冊一个俄文安卓论坛.发出来了链接大家在測试注冊. http://4pda.ru/forum/index.php? 註册方式請参看: _https://forum.tuts ...
- 【Python】学习笔记十五:循环对象
循环对象 所谓的循环对象,包含有一个next()方法(python3中为__next__() ),这个方法的目的就是进行到下一个结果,而在结束一系列结果之后,举出StopIteration错误 当一个 ...
- C语言的空格问题
对于C语言中,一般的理解是对于空格,我们可以随意输入,因为空格没啥大意义,但是事实上并非如此. 1.'\'空格的问题 '\' 字符可用于一些字符进行转移,当然也包括了 newline(enter),被 ...
- 使用Apache Benchmark做压力测试遇上的5个常见问题
这一篇文章主要记录我在使用Apache Benchmark(一下检测ab)做网站压力测试的过程中,遇到的一些问题以及解决办法,方便日后使用. 这一篇文章主要记录我在使用Apache Benchmark ...