## Zookeeper

> Zookeeper目前用来做数据同步,再各个服务之前同步关键信息

i.客户端操作

1. 创建
create [-s] [-e] path data acl
-s 为顺序节点 -e 为临时节点(临时节点在会话消失后即消失)
acl为权限控制,权限控制比较麻烦,而且只存在于此节点和此级,其子节点不受控制

2. 读取
ls :
ls path
列出此节点下的所有子节点
get:
get path
获取此节点的内容和属性
3. 更新
set path data [version]
version为可选,选择基于哪个版本更新
4. 删除
delete path [version]
5. 权限
在Zookeeper的那本书的第215页有详细介绍
这里使用的是digest加密方式,使用Zookeeper提供的方法加密

ii. Java客户端操作

代码地址: ZKService.java

1. 初始化客户端
```java
private CuratorFramework client = CuratorFrameworkFactory.builder()
.connectString(ZOOKEEPER的IP)
.retryPolicy(new ExponentialBackoffRetry(1000, 6))
.sessionTimeoutMs(5000)
.namespace(以哪个地址为基准)
.authorization(加密方式, 密码)
.build();
```
2. 注册监听
```java
private void watch(String path) {
ExecutorService tp = Executors.newFixedThreadPool(2);
System.out.println(Thread.currentThread().getName());
PathChildrenCache cache = new PathChildrenCache(这里把初始化的客户端传进来, 这里传入监听的地址, true, false, tp);
try {
cache.start(PathChildrenCache.StartMode.NORMAL);
} catch (Exception e) {
e.printStackTrace();
}
cache.getListenable().addListener(new PathChildrenCacheListener() {
public void childEvent(CuratorFramework client,
PathChildrenCacheEvent event) throws Exception {
switch (event.getType()) {
case CHILD_ADDED://这里三个switch分别对应三个操作,里面写实现的业务逻辑
listenService.initUser(new String(event.getData()));event.getData()是获取数据
break;
case CHILD_UPDATED:
break;
case CHILD_REMOVED:
break;
default:
break;
}
}
});
}
```

3. 创建
```
String path = "自定义";
try {
client.getClient().create()
.withMode(CreateMode.PERSISTENT_SEQUENTIAL)//这个是顺序持久节点(自动按照顺序给节点前加数字),SEQUENTIAL是单纯的持久节点
.forPath(这里传地址, "这里传数据");
} catch (Exception e) {
e.printStackTrace();
}
```

Zookeeper Client基础操作和Java调用的更多相关文章

  1. zookeeper client 常用操作

    #获取权限(类似于登陆) addauth digest admin-user:admin-password #查看权限 getAcl /collections/meixin_product/state ...

  2. [No000091]SVN学习笔记2-TortoiseSVN Client初级操作update(获取)、commit(提交)

    SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...

  3. zookeeper(三):java操作zookeeper

    引入jar包 首先要使用java操作zookeeper,zookeeper的javaclient 使我们更轻松的去对zookeeper进行各种操作,我们引入zookeeper-3.4.5.jar 和 ...

  4. 【ZooKeeper系列】2.用Java实现ZooKeeper API的调用

    温馨提示:在这里我再次提个小要求,希望大家能习惯看官方文档,文档虽然是英文但用词都比较简单,基本都能看懂文档表达的意思.授之以鱼不如授之以渔的道理相信大家都明白,也希望通过猿人谷的这个ZooKeepe ...

  5. 读Hadoop3.2源码,深入了解java调用HDFS的常用操作和HDFS原理

    本文将通过一个演示工程来快速上手java调用HDFS的常见操作.接下来以创建文件为例,通过阅读HDFS的源码,一步步展开HDFS相关原理.理论知识的说明. 说明:本文档基于最新版本Hadoop3.2. ...

  6. Java调用Zookeeper

    watch机制 Zookeeper watch是一种监听通知机制,可以随时监听一些数据的变化,从而实现数据的及时性. Zookeeper所有的读操作getData(), getChildren()和 ...

  7. Java基础教程:多线程基础(1)——基础操作

    Java:多线程基础(1) 实现多线程的两种方式 1.继承Thread类 public class myThread extends Thread { /** * 继承Thread类,重写RUN方法. ...

  8. JAVA大数类—基础操作(加减乘除、取模、四舍五入、设置保留位数)

    当基础数据类型长度无法满足需求时可以使用大数类 构造方法接受字符串为参数 BigInteger bInt = new BigInteger("123123"); BigDecima ...

  9. 原创】Java并发编程系列2:线程概念与基础操作

    [原创]Java并发编程系列2:线程概念与基础操作 伟大的理想只有经过忘我的斗争和牺牲才能胜利实现. 本篇为[Dali王的技术博客]Java并发编程系列第二篇,讲讲有关线程的那些事儿.主要内容是如下这 ...

随机推荐

  1. nginx http转 https

    场景 项目前期使用http,后期为了安全方面的考虑,启用了https.项目架构:前端使用nginx作为多个tomcat实例的反向代理和负载均衡.实际上只需要在nginx上启用https即可,使客户端与 ...

  2. [UE4]ProgressBar,进度条

    准备好2张进度条图片 一.新建名为“testProgress”的UserWidget,添加一个名为“ProgressBar_0”的ProgressBar到默认容器Canvas Panel 二.进度条进 ...

  3. Scala map与flatMap

    1. map函数   对集合的每一个元素运用某个函数操作,然后将结果作为一个新的列表返回. 实例1:将列表中每个元素值乘以2 scala> val list1=List(1,2,3,4) lis ...

  4. java 错误

    ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2 解决在程序最后加一条语句system. ...

  5. PHP实现JS点击点击定位

    点击class='women' 定位到 class='m=foot'$(".women").on('click',function(){ $("html, body&qu ...

  6. OS模块的介绍

    os,语义为操作系统,模块提供了访问多个操作系统服务的功能,可以处理文件和目录这些我们日常手动需要做的操作.os和它的子模块os.path还包括一些用于检查.构造.删除目录和文件的函数,以及一些处理路 ...

  7. 解决 jdk8 Illegal key size or default parameters 错误

    网上搜到的答案如:https://blog.csdn.net/educast/article/details/81060085  大多是jdk1.6或1.7版本,有的jdk是1.8.99之前的版本,而 ...

  8. c++之&

    转自www.cnblogs.com/Mr-xu/archive/2012/08/07/2626973.html 一直以为&是取地址,也看到引用,但是今天才发现引用跟取址完全不是一个意思,&am ...

  9. WordConut

    一.代码地址:https://gitee.com/cainiaoY/WordCount 二.代码: import java.io.*; import java.util.regex.*; public ...

  10. LINQ之let关键字

    let子句用于在LINQ表达式中存储子表达式的计算结果.let子句创建一个范围变量来存储结果,变量被创建后,不能修改或把其他表达式的结果重新赋值给它.此范围变量可以再后续的LINQ子句中使用. 实例1 ...