Zookeeper客户端API之创建会话(六)
来源:互联网 发布:石家庄餐饮软件 编辑:程序博客网 时间:2024/06/05 08:46
Zookeeper对外提供了一套Java的客户端API。本篇博客主要讲一下创建会话。
创建项目
首选,创建一个基于maven管理的简单java工程。在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表示要连接的zookeeper服务器地址列表,格式为: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(); } }}
由于Zookeeper客户端和服务器创建会话是异步过程,因此使用CountDownLatch来阻塞线程,等待服务器创建完成,并发送事件通知。
打印结果为:
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不正确时,服务器会返回Expired事件。
1 0
- Zookeeper客户端API之创建会话(六)
- Zookeeper系列(四)Zookeeper客户端(JAVA)API之创建会话
- ZooKeeper之Java客户端API使用—创建会话。
- Zookeeper客户端API之创建节点(七)
- Zookeeper系列(六)Zookeeper客户端(JAVA)API之创读取子节点列表
- Zookeeper系列(五)Zookeeper客户端(JAVA)API之创建节点
- ZooKeeper之Java客户端API使用—创建节点。
- Zookeeper实例原生API--创建一个基本的Zookeeper会话
- ZooKeeper之会话(session)
- Zookeeper实例原生API--创建会话(包含权限信息)
- Zookeeper实例ZkClient API-创建一个Zookeeper客户端
- Zookeeper客户端API之读取子节点列表(八)
- Zookeeper-会话创建流程
- Zookeeper系列(七)Zookeeper客户端(JAVA)API之创读取子节点内容
- Zookeeper系列(八)Zookeeper客户端(JAVA)API之修改、删除节点
- Zookeeper系列(八)Zookeeper客户端(JAVA)API之节点检查和权限控制
- Zookeeper实例Curator API-使用Fluent风格的API接口来创建一个ZooKeeper客户端
- Zookeeper(四)Java客户端API使用
- java实现单链表的增加,删除,查找,打印
- 特徵
- Ajax 完整教程
- Android开发常用的网站
- 产生cache coherence 问题的原因
- Zookeeper客户端API之创建会话(六)
- 文章标题
- 房卡麻将分析系列之"发牌器"算法设计
- 【强连通分量】POJ 1236 Network of Schools
- C++的substr函数的用法
- extern使用方法总结
- 【面试题7】用两个栈实现队列
- Django-Request 和Response
- 解决Oracle 10gR2的client无法登陆Oracle 12.2数据库的问题