zoukankan      html  css  js  c++  java
  • Zookeeper之Curator(1)客户端基本的创建,删除,更新,查找操作api

    Curator Framework提供了简化使用zookeeper更高级的API接口。它包涵很多优秀的特性,主要包括以下三点:

    1. 自动连接管理:自动处理zookeeper的连接和重试存在一些潜在的问题;可以watch NodeDataChanged event和获取updateServerList;Watches可以自动被Cruator recipes删除;
    2. 更干净的API:简化raw zookeeper方法,事件等;提供现代流式API接口
    3. Recipe实现:leader选举,分布式锁,path缓存,和watcher,分布式队列等。

    Zookeeper在实际生产环境中应用比较广泛,比如SOA的服务监控系统,Hadoop,spark的分布式调度系统。Curator框架提供的优秀特性可以使得我们更加便捷的开发zookeeper应用。本文主要讲解了curator的基本使用方法。

    CuratorFramework实例创建

    Curator框架通过CuratorFrameworkFactory以工厂模式和builder模式创建CuratorFramework实 例。 CuratorFramework实例都是线程安全的,我们应该当在ZooKeeper Cluster中共享同一个CuratorFramework实例。工厂方法newClient() 提供了简便创建client实例方式,使用start和close方法启动和关闭客户端。使用Curator框架创建客户端代码如下,

    RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
    CuratorFramework newClient=CuratorFrameworkFactory.newClient("localhost:2181", retryPolicy);

    操作数据节点

    zookeeper中,节点的组织类似于linux的文件系统,使用path来标识每个节点(znode),znode作为保存数据的容器,数据量限制在1M以内,这部分介绍如何使用curator框架创建,获取,更新,以及删除节点。

    创建节点

    Curator创建znode节点代码如下所示:

    public void createNode(CuratorFramework newClient, String path, CreateMode createMode, String data) {
            try {
                newClient.create().withMode(createMode).forPath(path, data.getBytes());
            } catch (Exception e) {
                System.out.println("创建节点失败, elog=" + e.getMessage());
            }
    }

    zookeeper中节点有两种类型,临时节点和永久节点,CreateMode类用于指定创建节点的类型,用户可以选择以下几个参数:

    1. CreateMode.PERSISTENT: 创建节点后,不删除就永久存在
    2. CreateMode.PERSISTENT_SEQUENTIAL:节点path末尾会追加一个10位数的单调递增的序列
    3. CreateMode.EPHEMERAL:创建后,回话结束节点会自动删除
    4. CreateMode.EPHEMERAL_SEQUENTIAL:节点path末尾会追加一个10位数的单调递增的序列

    forPath函数指定创建节点的path和保存的数据,path的指定遵循linux文件path格式,创建node时指定的path,父 path节点需要存在,否则创建节点失败,比如创建"/parent/child"节点,若不存在节点"parent",那么创建节点会失败。在 znode中保存的数据需要进行序列化,用户可以选择使用JSON,XML,java内置的序列化机制,或者Hession以及Google的 protocal Buffer等,为方便讲解,节点存储字符串数据。

    获取节点数据

    CuratorFramework提供getData函数,通过指定znode的path,就可以完成数据的获取。

    public String getData(CuratorFramework newClient, String path){
        try {
            return new String(newClient.getData().forPath(path));
        } catch (Exception e) {
            System.out.println("获取数据失败, elog=" + e.getMessage());
        }
        return null;
    }

    更新节点

    同样CuratorFramework提供setData函数,通过指定znode的path,可以完成数据的更新。

    public void updateNodeDate(CuratorFramework newClient, String path, String data) {
        try {
            newClient.setData().forPath(path, data.getBytes());
        } catch (Exception e) {
            System.out.println("更新节点数据失败, elog=" + e.getMessage());
        }
    }

    删除节点

    和获取,更新节点类似,CuratorFramework提供delete函数,指定znode的path删除某一个节点。

    public void deleteNode(CuratorFramework newClient, String path) {
        try {
            newClient.delete().forPath(path);
        } catch (Exception e) {
            System.out.println("删除节点失败, elog=" + e.getMessage());
        }
    }
  • 相关阅读:
    day04 列表和元组
    Python2和Python3的区别
    Ruby学习笔记2 : 一个简单的Ruby网站,搭建ruby环境
    Patrick Hughes
    Ruby学习笔记1 -- 基本语法和数据类型, Class
    Javascript学习笔记5
    php学习笔记1——使用phpStudy进行php运行环境搭建与测试。
    Linux配置和管理msyql命令
    干净win7要做几步才能运行第一个Spring MVC 写的动态web程序
    The difference between Spring Tool Suite and Spring IDE
  • 原文地址:https://www.cnblogs.com/a-du/p/9858078.html
Copyright © 2011-2022 走看看