一、Curator使用:如何开始使用及api介绍(创建会话以及增删查改)

前言

记录下ZK客户端的使用学习,初步想法是从几个方面来记录

  1. 如何开始使用及api介绍(创建会话以及增删查改)
  2. 异步调用
  3. 事件
  4. Master选举
  5. 分布式锁、计数器、Barrier

版本说明

zk版本:

curator版本:

    <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.2.0</version>
        </dependency>

常用API介绍

1.创建会话

    CuratorFramework cc = CuratorFrameworkFactory.builder()
                .connectString("ip:port")
                .sessionTimeoutMs(2000)
                .connectionTimeoutMs(5000)
                .retryPolicy(new ExponentialBackoffRetry(1000,3))
                .namespace("test")
                .build();
    cc.start();    

说一下retryPolicy,重连策略,建议用其中两种

    //重连3次,每次休息3秒
    new RetryNTimes(3,3000);
    //重连3次,每次休息大约是1秒
    new ExponentialBackoffRetry(1000,3);
    //初始化一个大概的等待时间1秒,然后开始重连,最多重连3次,每次最多休息2秒
    new ExponentialBackoffRetry(1000,3,2000);

    //计算通过这个初始化的大约时间,计算实际需要睡眠多久
    long sleepMs = baseSleepTimeMs * Math.max(1, random.nextInt(1 << (retryCount + 1)));

namespace代表命名空间,注意的是,curator会自动创建。
2.创建普通节点

    cc.create().forPath("/comm_msg_nd","ctx".getBytes());
    cc.create().forPath("/comm_no_msg_nd");



需要注意的是,如果没有值,会默认把当前ip地址放进去

    return InetAddress.getLocalHost().getHostAddress().getBytes(); 

3.创建临时节点

    cc.create().withMode(CreateMode.EPHEMERAL).forPath("/ephe_nd","ff".getBytes());
    //creatingParentsIfNeeded会自动创建父节点
    cc.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath("/ephe_nd","ff".getBytes());


需要注意,只有叶节点可以做临时节点,所以叶节点的父节点必须是永久节点,也就是creatingParentsIfNeeded这个方法创建的父节点必须是永久节点

4.删除节点

    //删除单独一个节点
    cc.delete().forPath("/comm_msg_nd");
    //删除多级节点
    cc.create().creatingParentsIfNeeded().forPath("/p1/p2/p3/multi_nd");
    cc.delete().deletingChildrenIfNeeded().forPath("/p1");
    //删除指定版本的节点
    cc.delete().withVersion(0).forPath("/comm_msg_nd");
    //保证删除,失败后继续执行
    cc.delete().guaranteed().forPath("/comm_msg_nd");

    //通过添加错误的回调方法来实现,错误后继续执行
    OperationAndData.ErrorCallback<String> errorCallback = null;
            if ( guaranteed )
            {
                errorCallback = new OperationAndData.ErrorCallback<String>()
                {
                    @Override
                    public void retriesExhausted(OperationAndData<String> operationAndData)
                    {
                        //将路径添加到错误处理中
                        client.getFailedDeleteManager().addFailedOperation(unfixedPath);
                    }
                };
            }
            client.processBackgroundOperation(new OperationAndData<String>(this, path, backgrounding.getCallback(), errorCallback, backgrounding.getContext(), null), null);

    //然后FailedDeleteManager中通过调用这个来继续请求删除操作
    @Override
    protected void executeGuaranteedOperationInBackground(String path)
            throws Exception
    {
        client.delete().guaranteed().inBackground().forPath(path);
    }

5.读数据

    Stat stat = new Stat();
    byte[] ctx = cc.getData().storingStatIn(stat).forPath("/comm_msg_nd");
    //获取节点内容为ctx
    System.out.println(new String(ctx));
    //获取该节点stat
    //78,78,1573789366124,1573789366124,0,0,0,0,3,0,78
    System.out.println(stat);

6.更新数据

    Stat stat = new Stat();
    stat = cc.setData().forPath("/comm_msg_nd","new ctx".getBytes());
    System.out.println(stat);

原文地址:https://www.cnblogs.com/june777/p/11865116.html

时间: 2024-12-15 06:40:53

一、Curator使用:如何开始使用及api介绍(创建会话以及增删查改)的相关文章

Zookeeper客户端API之创建会话(六)

Zookeeper对外提供了一套Java的客户端API.本篇博客主要讲一下创建会话. 创建项目 首选,创建一个基于maven管理的简单java工程.在pom文件中引入zookeeper. <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.9</version> </d

java对链表增删查改操作API

从c++方向搞点java副业.结果在静态链表这里绊了一跤.感谢巨人们的肩膀重见天日. 希望后来人少走些弯路. 废话少说,直接贴代码: 1.创建链表的节点类 public class Node { private Node node; private Object eleme; public void setEleme(Object eleme) { this.eleme = eleme; } public Node(){ this.eleme = null;node = null; } publ

ASP.NET Web API基于OData的增删改查,以及处理实体间关系

本篇体验实现ASP.NET Web API基于OData的增删改查,以及处理实体间的关系. 首先是比较典型的一对多关系,Supplier和Product. public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } public string Category { get; set; } [ForeignKey("Sup

Linux平台上SQLite数据库教程(二)——C语言API介绍

Linux平台上SQLite数据库教程(二)--C语言API介绍 前言:本文将介绍几个基本的SQLite3数据库的C语言API接口,主要用到两个文件:sqlite3.c.sqlite3.h.源码地址:https://github.com/AnSwErYWJ/SQLite. 打开数据库 1.原型: int sqlite3_open( const char* filename, /* 数据库文件名, 必须为 UTF-8 格式 */ sqlite3** ppDB /* 输出: SQLite 数据库句柄

ASP.NET Web API 过滤器创建、执行过程(二)

前言 前面一篇中讲解了过滤器执行之前的创建,通过实现IFilterProvider注册到当前的HttpConfiguration里的服务容器中,当然默认的基础服务也是有的,并且根据这些提供程序所获得的的过滤器信息集合进行排序.本篇就会对过滤器在创建完之后所做的一系列操作进行讲解. ASP.NET Web API 过滤器创建.执行过程(二) FilterGrouping过滤器分组类型 FilterGrouping类型是ApiController类型中的私有类型,它的作用就如同它的命名一样,用来对过

ASP.NET Web API 过滤器创建、执行过程(一)

前言 在上一篇中我们讲到控制器的执行过程系列,这个系列要搁置一段时间了,因为在控制器执行的过程中包含的信息都是要单独的用一个系列来描述的,就如今天的这个篇幅就是在上面内容之后所看到的一个知识要点之一. ASP.NET Web API 过滤器创建.执行过程(一) 下面就来讲解一下在ASP.NET Web API框架中过滤器的创建.执行过程. 过滤器所在的位置 图1 图1所示的就是控制器执行过程很粗略的表示. 通过上一篇内容我们了解到控制器方法选择器最后返回的并不是控制器方法,而是对于控制器方法描述

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

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

CasperJS API介绍

一.使用标准JavaScript对象作为可选参数构造CasperJS实例 1 直接在create()函数里面使用 var casper = require('casper').create({ clientScripts: [ 'includes/jquery.js', // These two scripts will be injected in remote 'includes/underscore.js' // DOM on every request ], pageSettings:

Restful api介绍

网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). 因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信.这导致API构架的流行,甚至出现"API First"的设计思想.RESTful API是目前比较成熟的一套互联网应用程序的API设计理论. 一.协议 API与用户的通信协议,总是使用HTTPs协议. 二.域名 应该尽量将API部署在专用域名之下. https://api.example.com 如