zoukankan      html  css  js  c++  java
  • Zookeeper Client基础操作和Java调用

    ## 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();
    }
    ```

  • 相关阅读:
    shell——变量
    xxx is not in the sudoers file.This incident will be reported.的解决方法
    百度面试回忆
    iOS网络协议 HTTP/TCP/IP浅析
    使用xib封装一个自定义view的步骤
    修改了系统自带头文件后,Xcode会报错
    字典转模型规范化
    文本属性Attributes
    苹果API常用英语名词
    命令行 -- 命令"%cd%"
  • 原文地址:https://www.cnblogs.com/serena25/p/7755441.html
Copyright © 2011-2022 走看看