Zookeeper客户端API之创建会话(六)

By | 03月10日
Advertisement

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

Similar Posts:

  • ZooKeeper客户端Curator使用一 创建连接

    如何创建一个ZK连接 工厂方法newClient() public static void main(String[] args) { final String connectString = "127.0.0.1:2181"; RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); CuratorFramework client = CuratorFrameworkFactory.newClient(connec

  • zookeeper 客户端的实现

    zookeeper 客户端的实现主要由以下三个类完成: org.apache.zookeeper.ZooKeeper org.apache.zookeeper.ClientCnxn org.apache.zookeeper.ClientCnxnSocketNIO org.apache.zookeeper.ZooKeeper主要是一层api的封装,客户端程序用到一个Zookeeper实例就可以进行所有的操作 ZKWatchManager是在org.apache.zookeeper.ZooKeepe

  • zookeeper客户端C lib代码阅读

    zookeeper客户端C lib代码阅读 添加评论2011年10月10日 ahxgw 如果想用C/C++进行zookeeper应用开发或者想学习一下linux系统/网络编程,那么阅读一下zookeeper客户端C lib的代码都是很有帮助的 zookeeper提供了完整的C lib给开发者使用,lib完全用C编写,主要涉及linux系统和网络编程的相关知识 代码结构 http://labs.renren.com/apache-mirror/zookeeper/ , zookeeper-3.4.

  • Apache OpenCMIS客户端API简介

    openCMIS客户端提供了一层面向对象的接口来便于使用CMIS的底层服务,除了CMIS规范,OpenCMIS客户层还引入了会话概念, 这使得应用程序能够更加容易控制客户端的缓存行为. 客户层由客户端接口.公共接口和运行时实现三部分组成.运行时把客户端接口映射到绑定层上并且实现会话缓存. 包 工件 描述 org.apache.chemistry.opencmis.client.api chemistry-opencmis-client-api 客户端API的主要接口 org.apache.che

  • MapReduce新版客户端API源码分析

    使用MapReduce新版客户端API提交MapReduce Job需要使用 org.apache.hadoop.mapreduce.Job 类.JavaDoc给出以下使用范例. // Create a new Job Job job = new Job(new Configuration()); job.setJarByClass(MyJob.class); // Specify various job-specific parameters job.setJobName("myjob&quo

  • zookeeper JAVA API 简单操作

    1 package org.admln.program.Zoo_Test; 2 3 import java.io.IOException; 4 import java.security.NoSuchAlgorithmException; 5 import java.util.ArrayList; 6 import java.util.List; 7 8 import org.apache.zookeeper.CreateMode; 9 import org.apache.zookeeper.Wa

  • Sqoop2 Java客户端API指南

    原文连接:http://sqoop.apache.org/docs/1.99.6/ClientAPI.html Sqoop Java客户端API指南 这篇文章秒描述了额如何在外部应用中使用sqoop java 客户端API.通过客户端API可以实现sqoop命令的功能.使用Sqoop客户端API需要Sqoop 客户端Jar文件及其依赖. 提供了支持sqool操作的封装方法的主要类是: public classSqoopClient { ... } Java Client API isexplai

  • ASP.NET Web API 过滤器创建、执行过程(二)

    ASP.NET Web API 过滤器创建.执行过程(二) 前言 前面一篇中讲解了过滤器执行之前的创建,通过实现IFilterProvider注册到当前的HttpConfiguration里的服务容器中,当然默认的基础服务也是有的,并且根据这些提供程序所获得的的过滤器信息集合进行排序.本篇就会对过滤器在创建完之后所做的一系列操作进行讲解. ASP.NET Web API 过滤器创建.执行过程(二) FilterGrouping过滤器分组类型 FilterGrouping类型是ApiControl

  • ZooKeeper CRUD API

    CRUD API create #创建一个节点 delete #删除一个节点 (get/set)Data #从目标节点上(读取/写)数据 getChildren # 获得子节点列表

  • DevExpress ASPxGridView 使用文档七:客户端API

    转载请注明出处:http://surfsky.cnblogs.com/ --------------------------------------------------------- -- ASPxGridView 客户端API --------------------------------------------------------- API PerformCallback(this.value); CollapseAll() ExpandAll() SelectRows() Uns

Tags: