zookeeper是一个分布式服务管理工具,本身具备高可用性,很多知名分布式系统入hadoop、Hbase等都采用zk管理。

常见的两个应用场景:1、服务的注册与发现  2、集群统一配置

下面看一下使用java 对zk进行交互的常用api

首先maven引入:

<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.3-beta</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.serialize.SerializableSerializer;
import org.apache.zookeeper.CreateMode; /**
* @author panteng
* @description
* @date 17-5-24.
*/
public class Zk {
public static void main(String[] arges) {
String ZKServers = "10.38.164.80:2181,10.38.164.80:2182,10.38.164.80:2183";
/**
* 创建会话
* new SerializableSerializer() 创建序列化器接口,用来序列化和反序列化
*/
ZkClient zkClient = new ZkClient(ZKServers, 10000, 10000, new SerializableSerializer());
System.out.println("conneted ok!"); //订阅节点的子节点变化
zkClient.subscribeChildChanges("/javaApp", new ZKChildListener());
String appPath = zkClient.create("/javaApp/api", "javaApp", CreateMode.EPHEMERAL_SEQUENTIAL);
//输出创建节点的路径
System.out.println("created path:" + appPath);
//订阅数据的变化
zkClient.subscribeDataChanges(appPath, new ZkDataListener()); //读数据
String str = zkClient.readData(appPath);
System.out.println(str);
//写数据
zkClient.writeData(appPath, "newJavaApp");
System.out.println(zkClient.readData(appPath));
//判断节点是否存在
System.out.println(zkClient.exists("/javaApp/api0000000010")); try {
Thread.sleep(20000);
} catch (Exception e) { }
}
}

Zk.java

import org.I0Itec.zkclient.IZkDataListener;

/**
* @author panteng
* @description
* @date 17-5-24.
*/
public class ZkDataListener implements IZkDataListener {
/**
* 节点数据发生变化时 触发此函数
*
* @param s 发生变化的节点路径
* @param o 节点变化后的数据
* @throws Exception
*/
@Override
public void handleDataChange(String s, Object o) throws Exception {
System.out.println("Change = " + s + " obj=" + o);
} @Override
public void handleDataDeleted(String s) throws Exception {
System.out.println("Delete = " + s);
}
}

ZkDataListener

import org.I0Itec.zkclient.IZkDataListener;

/**
* @author panteng
* @description
* @date 17-5-24.
*/
public class ZkDataListener implements IZkDataListener {
/**
* 节点数据发生变化时 触发此函数
*
* @param s 发生变化的节点路径
* @param o 节点变化后的数据
* @throws Exception
*/
@Override
public void handleDataChange(String s, Object o) throws Exception {
System.out.println("Change = " + s + " obj=" + o);
} @Override
public void handleDataDeleted(String s) throws Exception {
System.out.println("Delete = " + s);
}
}

ZkDataListener

遍历所有节点

public static void getAllNodes(ZkClient zkClient, String currentPath) {
try {
List<String> stringList = zkClient.getChildren(currentPath);
for (String str : stringList) {
if ("/".equals(currentPath)) {
str = currentPath + str;
} else {
str = currentPath + "/" + str;
}
System.out.println(str);
getAllNodes(zkClient, str);
}
} catch (Exception e) {
if (e.getMessage().indexOf("KeeperErrorCode = NoNode for") > -1) {
return;
}
} }

分布式服务管理zookeeper的java api的更多相关文章

  1. 分布式服务框架 Zookeeper — 管理分布式环境中的数据

    本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Zab协议.通信协议等相关知识,理解起来比较抽象所以还需要借助一些应用场景,来帮我们理解. ...

  2. 分布式服务框架 Zookeeper(转)

    分布式服务框架 Zookeeper -- 管理分布式环境中的数据 Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题 ...

  3. 大数据 --> 分布式服务框架Zookeeper

    分布式服务框架 Zookeeper Zookeeper系列 分布式服务框架 Zookeeper -- 管理分布式环境中的数据

  4. Linux -- 基于zookeeper的java api(二)

    Linux -- 基于zookeeper的java api(二) 写一个关于基于集群的zookeeper的自定义实现HA 基于客户端和监控器:使用监控的方法查看每个注册过的节点的状态来做出操作. Wa ...

  5. zookeeper的java api操作

    zookeeper的java api操作 创建会话: Zookeeper(String connectString,int sessionTimeout,Watcher watcher) Zookee ...

  6. Linux -- 基于zookeeper的java api(一)

    Linux -- 基于zookeeper的java api 首先启动你所有的 zkService.sh 查看状态:检查是否启动正确 [root@hu-hadoop2 ~]# zkServer.sh s ...

  7. 【分布式】Zookeeper使用--Java API

    一.前言 上一篇博客我们通过命令行来操作Zookeper的客户端和服务端并进行相应的操作,这篇主要介绍如何通过API(JAVA)来操作Zookeeper. 二.开发环境配置 首先打开Zookeeper ...

  8. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/index.html Zookeeper 分布式服务框架是 Apa ...

  9. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据(转载)

    本文转载自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ Zookeeper 分布式服务框架是 Apache Had ...

随机推荐

  1. Notepad++ 64位 插件管理

    notepad++ 64bit 没有插件管理,如何添加呢? 1.访问https://github.com/bruderstein/nppPluginManager/releases,下载  Plugi ...

  2. LeetCode Problem 169: Majority Element查找多数元素

    描述:Given an array of size n, find the majority element. The majority element is the element that app ...

  3. 《从零开始学Swift》学习笔记(Day 53)——do-try-catch错误处理模式

    原创文章,欢迎转载.转载请注明:关东升的博客 Swift 1.x的错误处理模式存在很多弊端,例如:为了在编程时候省事,给error参数传递一个nil,或者方法调用完成后不去判断error是否为nil, ...

  4. PHP-Heredoc用法:<<<EOFEOF;

    Heredoc,用来输出大段的HTML和JavaScript <<<EOF后面不能有空格. EOF;末尾的结束符必须靠边,并且前面不能有空格和缩进符. 例如: $mazey=< ...

  5. 【转】Power System 中基于 VIOS 的虚拟以太网实现

    基于 VIOS 的虚拟以太网适配器的工作原理和配置实现 本文对 Power 系统中基于 VIOS 的虚拟以太网适配器(Virtual Ethernet Adapter)的工作原理.基本配置选项和配置步 ...

  6. Qt 如何获取一个文件的 Icon 图标?

    #include <QPixmap> #include <QString> #include <QFileInfo> #include <QFileIconP ...

  7. JDBC请求

    做JDBC请求,首先需要两个jar包:mysql驱动-mysql-connector-java-5.1.13-bin.jar 和 sqlServer驱动-sqljdbc4.jar,将这两个jar包放到 ...

  8. 002-maven修改仓库以及镜像地址

    1.将下载好的maven,修改配置 <localRepository>G:\mavenrepository-idea</localRepository> 2.修改增加镜像地址 ...

  9. 剑指offer 面试10题

    面试10题: 题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.n<=39 n=0时,f(n)=0 n=1时,f(n)=1 n>1时,f(n)=f(n-1 ...

  10. python常用模块——time模块

    参考博客:http://blog.csdn.net/SeeTheWorld518/article/details/48314501 http://www.jb51.net/article/49325. ...