Zookeeper——JAVA Client

一.zookeeper简介

    一款管理分布式应用程序的协调服务系统

二.zookeeper应用场景

    

    网上也有很多介绍,可以参见    http://blog.csdn.net/xinguan1267/article/details/38422149

本文主要介绍基于java的客户端开发

三.基于JAVA客户端实战

3.1Client

    

// 创建一个与服务器的连接 需要(服务端的 ip+端口号)(session过期时间)(Watcher监听注册) 
		 ZooKeeper zk = new ZooKeeper("10.154.156.180:2181", 
		        3000, new Watcher() { 
		            // 监控所有被触发的事件
					public void process(WatchedEvent event) {
						// TODO Auto-generated method stub
						System.out.println("已经触发了" + event.getType() + "事件!"); 
					} 
		  });

		 // 创建一个目录节点
		 /**
		  * CreateMode:
		  * 	PERSISTENT (持续的,相对于EPHEMERAL,不会随着client的断开而消失)
		  *		PERSISTENT_SEQUENTIAL(持久的且带顺序的)
		  *		EPHEMERAL (短暂的,生命周期依赖于client session)
		  *		EPHEMERAL_SEQUENTIAL  (短暂的,带顺序的)
		  */
		 zk.create("/testRootPath", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT); 
		 
		 // 创建一个子目录节点
		 zk.create("/testRootPath/testChildPathOne", "testChildDataOne".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT); 
		 System.out.println(new String(zk.getData("/testRootPath",false,null))); 
		 
		 // 取出子目录节点列表
		 System.out.println(zk.getChildren("/testRootPath",true)); 
		 
		 // 创建另外一个子目录节点
		 zk.create("/testRootPath/testChildPathTwo", "testChildDataTwo".getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT); 		 
		 System.out.println(zk.getChildren("/testRootPath",true)); 
		 
		// 修改子目录节点数据
		 zk.setData("/testRootPath/testChildPathOne","hahahahaha".getBytes(),-1); 	 		 
		 byte[] datas = zk.getData("/testRootPath/testChildPathOne", true, null);
		 String str = new String(datas,"utf-8");
		 System.out.println(str); 
		 
		 //删除整个子目录   -1代表version版本号,-1是删除所有版本
		 zk.delete("/testRootPath/testChildPathOne", -1);	 
		 System.out.println(zk.getChildren("/testRootPath",true)); 
		 System.out.println(str);

部分例式    具体可参见官网api: http://zookeeper.apache.org/doc/r3.2.2/api/org/apache/zookeeper/ZooKeeper.html#create%28java.lang.String,%20byte%5B%5D,%20java.util.List,%20org.apache.zookeeper.CreateMode%29

3.2Curator

Curator框架提供了一套高级的API, 简化了ZooKeeper的操作。 它增加了很多使用ZooKeeper开发的特性,可以处理ZooKeeper集群复杂的连接管理和重试机制。 这些特性包括:

    • 封装ZooKeeper client与ZooKeeper server之间的连接处理;
    • 提供了一套Fluent风格的操作API;
    • 提供ZooKeeper各种应用场景(recipe, 比如共享锁服务, 集群领导选举机制)的抽象封装.
  • 关于Fluent风格可以查看我的一篇博客(建造者模式),在偶看es搜索源码时发现也使用了Fluent风格。
  • 如下是使用Curator创建对象的方法
  • public static CuratorFramework createWithOptions(String connectionString, RetryPolicy retryPolicy, int connectionTimeoutMs, int sessionTimeoutMs) {
            
            return CuratorFrameworkFactory.builder().connectString(connectionString)
                    .retryPolicy(retryPolicy)
                    .connectionTimeoutMs(connectionTimeoutMs)
                    .sessionTimeoutMs(sessionTimeoutMs)
                    .build();
        }

调用代码如下:

       
client = createWithOptions("10.154.156.180:2181", new ExponentialBackoffRetry(1000, 3), 1000, 1000);
client.start();


如果需要创建新目录节点 依然是Fluent风格

client.create().forPath("/curator", new byte[0]);
client.create().withMode(CreateMode.PERSISTENT).forPath("/curator/childOne", new byte[0]);

当然创建zk也可以不使用Fluent风格

public static CuratorFramework createSimple(String connectionString) {        
        ExponentialBackoffRetry retryPolicy = new ExponentialBackoffRetry(1000, 3);        
        return CuratorFrameworkFactory.newClient(connectionString, retryPolicy);
}

其他方法说明: 

  • create(): 发起一个create操作. 可以组合其他方法 (比如mode 或background) 最后以forPath()方法结尾
  • delete(): 发起一个删除操作. 可以组合其他方法(version 或background) 最后以forPath()方法结尾
  • checkExists(): 发起一个检查ZNode 是否存在的操作. 可以组合其他方法(watch 或background) 最后以forPath()方法结尾
  • getData(): 发起一个获取ZNode数据的操作. 可以组合其他方法(watch, background 或get stat) 最后以forPath()方法结尾
  • setData(): 发起一个设置ZNode数据的操作. 可以组合其他方法(version 或background) 最后以forPath()方法结尾
  • getChildren(): 发起一个获取ZNode子节点的操作. 可以组合其他方法(watch, background 或get stat) 最后以forPath()方法结尾
  • inTransaction(): 发起一个ZooKeeper事务. 可以组合create, setData, check, 和/或delete 为一个操作, 然后commit() 提交


时间: 2024-07-28 19:24:59

Zookeeper——JAVA Client的相关文章

ZooKeeper Java Example

A Simple Watch Client Requirements Program Design The Executor Class The DataMonitor Class Complete Source Listings A Simple Watch Client To introduce you to the ZooKeeper Java API, we develop here a very simple watch client. This ZooKeeper client wa

Kafka 0.9+Zookeeper3.4.6集群搭建、配置,新版Java Client的使用要点,高可用性测试,以及各种坑(二)

上一节中(点此传送),我们完成了Kafka集群的搭建,本节中我们将介绍0.9版本中的新API,以及Kafka集群高可用性的测试 1. 使用Kafka的Producer API来完成消息的推送 1) Kafka 0.9.0.1的java client依赖: <dependency>     <groupId>org.apache.kafka</groupId>     <artifactId>kafka-clients</artifactId>  

zookeeper java调用及权限控制

import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEven

JIRA Rest JAVA Client API实现问题管理及自定义字段

JIRA是一个缺陷跟踪管理系统,被广泛应用于缺陷跟踪.客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域,当我们需要把第三方业务系统集成进来时,可以调用他的API. JIRA本身的API非常强大,但它是一个底层的API体系,并不是一个易用的接口,如果要开发和拓展,所以需要我们二次包装. jira官方为解决这个问题,推出了方便强大的java client library(目前只有java客户端库,没有.Net类库) jira的Rest API  最新文档官网. JIRA 6.4.

Memcached Java Client with sample program--reference

In my previous post, I listed down most common telnet commands for memcached with sample execution terminal logs. Today I want to discuss about the Memcached Client program available in Java language. There are three most widely used memcached client

【Tech】CAS多机部署Server和Java Client端

昨天尝试把cas的java client端部署到另外一台机器,结果就有问题了.(localhost部署cas server和java client端参见:http://www.cnblogs.com/sunshineatnoon/p/4119565.html) 主要是client访问的时候报错:javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative n

Redis c/c++, java client连接

Redis 介绍 redis这个想必大家都了解,关于redis的安装參考这里,redis使用文档參见这里,英文文档. Redis Cclient的用法 Redis的cclient Hiredis使用比較广泛,以下主要介绍下它. 1,Hiredis的安装,配置 Hiredisclient 在redis解压后的deps/hiredis下有对应的文件.假设你的安装包没有对应的文件能够到这里下载. cd deps/hiredis (下载hiredis的话 自行解压进入 解压后的文件夹). make 最后

elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)

一.ES Client 简介 1. ES是一个服务,采用C/S结构 2. 回顾 ES的架构 3. ES支持的客户端连接方式 3.1 REST API ,端口 9200 这种连接方式对应于架构图中的RESTful style API这一层,这种客户端的连接方式是RESTful风格的,使用http的方式进行连接 3.2 Transport 连接 端口 9300 这种连接方式对应于架构图中的Transport这一层,这种客户端连接方式是直接连接ES的节点,使用TCP的方式进行连接 4. ES提供了多种

ZooKeeper JAVA API 之环境准备和创建会话

Zookeeper是一个开放源代码的分布式协调服务,由雅虎创建,是Google Chubby的开源实现.Zookeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的元语集,并以一系列简单易用的接口提供给用户使用. 单机模式部署与运行(Windows) 确保已经安装了JAVA 1.6及其以上版本的JDK 下载Zookeeper    http://zookeeper.apache.org/releases.html  目前稳定版本即stable版本为3.4.6.