低头凝望镜中月

不如关注木丘白

一步两步向前走

共同学习一起来

前言

这段时间事比较多,十一还回了趟老家,回顾一下上一篇简单讲了zookeeper的简介以及安装,当然关于zookeeper还有好多你不知道的事,后面打算再写一篇番外篇,属于扩展了解内容。本编主要讲一下zookeeper客户端的操作,以及Curator框架的使用。

zkCli

上篇安装完成之后简单介绍了一下客户端的操作,那就书接上回吧。

登录客户端操作./zkCli.sh -server localhost:2181查看节点信息ls /随便创建一个节点create -e /test hello登录其他服务节点查看是否同步get /test

NO.1

创建临时节点create -e /tmp hello创建顺序节点create -s /gogo hello顺序节点会在后面加上一个10位的编号,0000000001这种,顺序递增不添加-e或者-s参数时,默认是持久节点

NO.1

删除节点delete /tmp如果删除的节点下面还有子节点,则无法删除,会提示Node not empty

NO.1

修改节点set /tmp heihei

NO.1

查询可以使用ls命令和get命令查看节点下有多少子节点ls /查看某个节点的value值get /tmp

这里这是简单的介绍了一下zkCli客户端的基本操作,下面讲解一下Java中API的使用。

Curator

Java操作zk,这里要提到非常强大的框架CuratorFramework,这个框架已经被收录在Apache当中,提供了非常丰富的操作,超时重连,分布式锁,分布式计数器等等。

使用curator需要注意与zk的版本对应,目前curator的最新大版本为5.0版本,不再支持zookeeper 3.4.x版本,因为zk的3.4.x版本已经停产,如果您希望将Curator与ZooKeeper 3.4.x一起使用,则应固定到Curator的4.2.x版本。Curator 4.2.x在软兼容模式下支持ZooKeeper 3.4.x集成。要使用此模式,在将Curator添加到依赖管理工具时,必须排除ZooKeeper。

mavenorg.apache.curatorcurator-recipes4.2.0org.apache.zookeeperzookeeper
gradlecompile('org.apache.curator:curator-recipes:$curatorVersion') {  exclude group: 'org.apache.zookeeper', module: 'zookeeper'}

本篇以zk 3.6.2版本与curator 5.1.0版本结合使用,不涉及上面说的兼容问题哦。

首先我们来了解一下zookeeper的节点类型CreateMode,以3.6.2为例,这个是zookeeper的官方文档https://zookeeper.apache.org/doc/r3.6.2/apidocs/zookeeper-server/index.html

3.6版本后有7种节点类型

类型 描述
CONTAINER znode将是一个容器节点。容器节点是对方法有用的特殊用途节点,如leader、lock等。当容器的最后一个子节点被删除时,容器将成为服务器在将来某个时候删除的候选节点。考虑到这个属性,当在此类节点下创建子节点时,可能返回KeeNonException.KeeNonException
EPHEMERAL 临时节点,当客户端断开连接时,znode将被删除
EPHEMERAL_SEQUENTIAL 临时序列节点,当客户端断开连接时,znode将被删除,其名称将附加一个递增的数字
PERSISTENT 持久化节点,客户端断开连接时,znode不会自动删除
PERSISTENT_SEQUENTIAL 持久化序列节点,客户端断开连接时,znode不会自动删除,它的节点名称会附加一个递增的数字
PERSISTENT_SEQUENTIAL_WITH_TTL 持久化序列节点,客户端断开连接时,znode不会自动删除,它的节点名称会附加一个递增的数字,如果znode没有在给定的TTL(生命周期)中被修改,那么一旦它没有子对象,它就会被删除
PERSISTENT_WITH_TTL 持久化节点,客户端断开连接时,znode不会自动删除,如果znode没有在给定的TTL(生命周期)中被修改,那么一旦它没有子对象,它就会被删除

了解了zk的节点类型后,接下来开始上代码喽

①这里使用的springboot,首先导入需要的依赖

org.springframework.bootspring-boot-starter-web2.1.0.RELEASEsnakeyamlorg.yaml

org.springframework.bootspring-boot-configuration-processortrue2.1.0.RELEASE

org.springframework.bootspring-boot-starter-aop2.1.0.RELEASEorg.yamlsnakeyaml1.26org.apache.curatorcurator-recipes5.1.0slf4j-apiorg.slf4j

org.springframework.bootspring-boot2.1.0.RELEASEcompileorg.springframework.bootspring-boot-autoconfigure2.1.0.RELEASEcompilejunitjunit4.12testorg.springframeworkspring-test5.1.2.RELEASEtestorg.springframework.bootspring-boot-test2.1.0.RELEASEtestorg.projectlomboklombok1.18.12compileorg.projectlomboklombok1.18.12compile

②新建一个zk的配置类

/** * zk配置信息 * @author QB * @date 2020-10-09 15:26 */@Data@ConfigurationProperties(prefix = "zk")public class ZkProps {/**     * 连接地址     */private String url;

/**     * 超时时间(毫秒),默认1000     */private int timeout = 1000;

/**     * 重试次数,默认3     */private int retry = 3;}

③初始化配置

/** * zk配置 * @author QB * @date 2020-10-09 15:44 */@Configuration@EnableConfigurationProperties(ZkProps.class)public class ZkConfig {

private final ZkProps zkProps;

@Autowiredpublic ZkConfig(ZkProps zkProps) {this.zkProps = zkProps;    }

@Beanpublic CuratorFramework curatorFramework() {        RetryPolicy retryPolicy = new ExponentialBackoffRetry(zkProps.getTimeout(), zkProps.getRetry());        CuratorFramework client = CuratorFrameworkFactory.newClient(zkProps.getUrl(), retryPolicy);        client.start();return client;    }}

④springboot启动类

/** * 启动类 * @author QB * @date 2020-10-09 15:56 */@SpringBootApplicationpublic class SpringBootZookeeperDemoApplication {

public static void main(String[] args) {        SpringApplication.run(SpringBootZookeeperDemoApplication.class, args);    }

}

测试一波

package com.qbnever.zookeeper;

import org.apache.curator.framework.CuratorFramework;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.data.Stat;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;

import java.io.UnsupportedEncodingException;import java.util.List;

@RunWith(SpringRunner.class)@SpringBootTestpublic class ZookeeperClientTest {

@Autowired    CuratorFramework curator;

/**     * 添加节点     * @throws Exception     */@Testpublic void addNode() throws Exception {

//不指定节点类型,默认是持久化节点PERSISTENT        curator.create().forPath("/test1");

//指定类型,创建一个临时节点,这里可以替换createMode创建不同类型的节点        curator.create().withMode(CreateMode.EPHEMERAL).forPath("/haha");//创建节点同时赋值        curator.create().withMode(CreateMode.PERSISTENT).forPath("/hello", "你好".getBytes("UTF-8"));//递归创建        curator.create().creatingParentContainersIfNeeded().forPath("/parent/child/child2");    }

/**     * 删除节点     */@Testpublic void deleteNode() throws Exception {//删除单个节点,如果存在子节点会报错 KeeperException$NotEmptyException        curator.delete().guaranteed().forPath("/haha");//递归删除,同时删除所有子节点        curator.delete().deletingChildrenIfNeeded().forPath("/recursive");    }

/**     * 更新节点     */@Testpublic void updateNode() throws Exception {        curator.setData().forPath("/haha", "哈哈".getBytes("UTF-8"));

    }

/**     * 查询节点     */@Testpublic void getNode() throws Exception {//获取某个节点的值byte[] bytes = curator.getData().forPath("/haha");        System.out.println(new String(bytes, "UTF-8"));

//获取节点下的一级子节点,不会递归获取        List recursive = curator.getChildren().forPath("/recursive");        System.out.println(recursive);    }/**     * 判断节点是否存在     */@Testpublic void isExist() throws Exception {        Stat stat = curator.checkExists().forPath("/haha");        System.out.println(stat==null? "否" : "是");    }}

好了,到这就结束了,快去试试吧,后面会分享分布式锁的实现哦,关注我,不迷路哈哈

点在看~

捧个人场就行~

windows下客户端连接上马上会断开连接_zookeeper系列客户端的骚操作amp; Curator使用...相关推荐

  1. windows下客户端连接上马上会断开连接_Fix SSH客户端登录会话超时设置

    通常默认公有云上的ECS远程连接,很容易断开,当你有什么事情被打断或者去操作别的机器同步做点其他事情,你会发现你SSH客户端登录窗口经常会断开掉,非常烦人,经常要重新登录. 如果用一些Windows下 ...

  2. windows下客户端连接上马上会断开连接_Tunneller VS DCOM,稳定性更高的连接!

    前言 上周我们给大家展示了使用OPC Tunneller完成OPC通信的方法,有了Tunneller以后我们不再需要进行繁琐的DCOM的配置,也能正常的进行OPC通信.同时也谈到了如果OPC Tunn ...

  3. windows下客户端连接上马上会断开连接_浅尝Java NIO与Tomcat简单连接调优

    P本文使用jdk1.8.0_45spring boot 2.1.4.RELEASE 涉及源码都放在https://github.com/sabersword/Nio 前因 这周遇到一个连接断开的问题, ...

  4. windows下用XShell远程ubuntu时连接失败

    现象描述:Ubuntu能Ping通主机,主机也能ping通虚拟机.但是windows下用XShell远程ubuntu时连接失败. 解决方案: 步骤: 1.查看一下防火墙状态:sudo ufw disa ...

  5. qt客户端连接服务器不响应,qt判断tcp客户端是否连接服务器

    qt判断tcp客户端是否连接服务器 内容精选 换一换 本章节指导您使用MongoDB客户端,通过弹性云服务器内网方式连接GaussDB(for Mongo)集群实例.操作系统使用场景:弹性云服务器的操 ...

  6. linux下socket编程实现一个服务器连接多个客户端

    使用socekt通信一般步骤 1)服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接. 2)客户端:socker()建立套接字,连接(con ...

  7. 客户端主动断开连接_Go实现客户端和服务器抓包分析TCP三次握手和断开操作

    本文主要是想通过抓包工具分析一下TCP三次握手和断开过程: 1.TCP三次握手建立连接和断开连接解释,如下图: TCP三次握手建立连接和断开连接 2.通过WireShark抓包查看这个TCP过程,数据 ...

  8. dmb显示服务器断开连接,dmb联网信息发布系统操作手册企业加强版.docx

    Document number:PBGCG-0857-BTDO-0089-PTT1998 Document number:PBGCG-0857-BTDO-0089-PTT1998 DMB联网信息发布系 ...

  9. 客户端连接mysql 自动断开_MySql连接空闲8小时自动断开的原因及连接池配置方法...

    数据库连接超时时间查询 非交互式超时时间,如 JDBC 程序 show global variables like 'wait_timeout'; 交互式超时时间,如数据库工具 show global ...

  10. Windows下最简洁的Linux远程连接软件

    一直在找Linux远程连接软件,都发现不够简洁,清爽.直到最近发现了 putty 这个软件.先放一张效果图! 比较清爽吧!下面介绍下他的使用! 下载地址: 官方地址:https://www.chiar ...

最新文章

  1. Beyond MySQL --Branching the popular database--转载
  2. JVM---堆(逃逸分析与代码优化)
  3. 八进制数输出二进制c语言,C语言 某数输出二进制的某位
  4. iPhone之横竖屏与自动旋转
  5. [九]RabbitMQ-客户端源码之Consumer
  6. 洛谷P4841 城市规划(多项式求逆)
  7. 前端学习(3152):react-hello-react之初始化react
  8. JEasyPoi 2.1.4 (Jeecg订制) 版本发布,Excel 和 Word 简易工具类
  9. AI 算法在 FPGA 芯片上还有这种操作?
  10. oracle 修索引改空间_oracle 修改索引现有表空间
  11. 剑指offer--两个链表的第一个公共结点
  12. 手动实现一维离散数据小波分解与重构
  13. 惠普触控板使用指南_惠普笔记本触摸板使用技巧
  14. linux怎么查看hwaddr_Linux查看MAC地址方法
  15. C语言 —— char类型的使用(二)
  16. Windows免杀木马+维持权限(shellter)
  17. 遥感(4):卫星遥感图像处理
  18. matlab使用杂谈5-fftshift函数的使用
  19. PTA 7-194 循环结构 —— 中国古代著名算题。趣味题目:物不知其数。
  20. 招聘|蔚来汽车招感知算法工程师(Intern)

热门文章

  1. MYSQL 取上一条记录,与下一条记录
  2. Android访问WCF服务(上篇)-服务端开发
  3. 连连看.NET v1.2版下载
  4. http 请求中的 referer
  5. 库路径及编译时查找头文件设置
  6. 成熟的云管理是什么样的?
  7. 【Mybatis系列】从源码角度理解Mybatis字段映射-驼峰式命名
  8. 工作周记 - 第四周 (2016/06/12 - 2016/06/18) 我没喝多,但是今天话多了 - -
  9. Zookeeper节点监听结合Spring
  10. 自动化企业人才如何定位?