创建会话

客户端可以通过创建一个Zookeeper实例来连接服务器。4种构造方法如下

ZooKeeper(connectString, sessionTimeout, watcher);

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

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

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

注意,zookeeper客户端和服务端会话建立是一个异步的过程,也是就是说在程序中构造zookeeper方法初始化方法执行完后

会立即返回,在大多数情况下此时并没有真正的建立一个可用的会话,此时会话正处于CONnectioning状态。当真正的会话建立后

服务端会向客户端发送一个通知,客户端在获取这个通知后会话才真正的建立。

package session;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.Watcher.Event.KeeperState; public class CreateZookeeper implements Watcher {
private static CountDownLatch connectedSemaphore = new CountDownLatch(1); @Override
public void process(WatchedEvent event) {
System.out.println("receive watched event:"+event);
if (KeeperState.SyncConnected==event.getState()) {
connectedSemaphore.countDown();
} }
public static void main(String[] args) throws IOException {
ZooKeeper zooKeeper = new ZooKeeper("192.168.64.60", 5000, new CreateZookeeper()); System.out.println(zooKeeper.getState()); try {
connectedSemaphore.await();
} catch (InterruptedException e) {}
System.out.println("zookeeper session established"); } }

程序运行结果如下:

CreateZookeeper类实现了Watcher接口重写了process方法,该方法负责处理来自zookeeper服务端的通知。在

收到来自服务端的synconncted事件后,解除了主程序中的CountDownLatch等待阻塞。至此客户端会话创建完成。

创建一个复用sessionId和sessionPasswd的实例

package session;

import java.io.IOException;
import java.util.concurrent.CountDownLatch; import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.Watcher.Event.KeeperState; public class CreateZookeeper2 implements Watcher {
public static CountDownLatch connectedSemaphore = new CountDownLatch(1); @Override
public void process(WatchedEvent event) {
System.out.println("receive watched event:"+event);
if (KeeperState.SyncConnected==event.getState()) {
connectedSemaphore.countDown();
} } public static void main(String[] args) throws IOException, InterruptedException {
ZooKeeper zooKeeper = new ZooKeeper("192.168.64.60", 5000, new CreateZookeeper());
connectedSemaphore.await();
long sessionId = zooKeeper.getSessionId();
byte[] sessionPasswd = zooKeeper.getSessionPasswd(); //复用sessionId和sessionPasswd
zooKeeper = new ZooKeeper("192.168.64.60", 5000, new CreateZookeeper(),1l,"test".getBytes()); zooKeeper = new ZooKeeper("192.168.64.60", 5000, new CreateZookeeper(),sessionId,sessionPasswd); Thread.sleep(Integer.MAX_VALUE); } }

我们可以看出,第一次使用错误的id和pw服务端返回“EXpired”事件,而第二次使用正确的id和pw则重新连接上。

最新文章

  1. 将nuget与VS直接集成,实现一键上传等功能
  2. Tp-link TL-WR841N无线路由器端口映射到外网如何设置
  3. [Gradle]填坑记录
  4. SCI Index
  5. python 函数式编程工具
  6. 变形--缩放 scale()
  7. Python脚本控制的WebDriver 常用操作 <六> 打印当前页面的title及url
  8. SubLime2 乱码解决
  9. Java基础学习 —— 对象的克隆
  10. 安卓笔记--Edittext禁止换行
  11. 番外篇1:在Windows环境中安装JDK
  12. group_concat_max_len
  13. 云笔记项目-Spring事务学习-传播NESTED
  14. 根据Excel模板存储数据,并下载
  15. VBScript入门篇
  16. 用MSBuild和Jenkins搭建持续集成环境(1)[收集]
  17. 【转】浅谈React、Flux 与 Redux
  18. python的回收机制
  19. 4.写出完整版的strcpy函数
  20. 加锁并发算法 vs 无锁并发算法

热门文章

  1. ubuntu 搜狗输入法成功安装
  2. NOI2001 食物链【扩展域并查集】*
  3. 再也不用克隆多个仓库啦!git worktree 一个 git 仓库可以连接多个工作目录
  4. For input string: "null"
  5. 使用neon 开发nodejs addon
  6. 解决Vsphere Client 60天过期问题
  7. win10下启动zkui
  8. 理解加密算法——创建CA机构,签发证书并开始TLS通信
  9. 黄聪:VS2010中“新建项目”却没有“解决方案”节点,如何调出来
  10. python-redis-pipe文件