windows下客户端连接上马上会断开连接_zookeeper系列客户端的骚操作amp; Curator使用...
低头凝望镜中月
不如关注木丘白
一步两步向前走
共同学习一起来
前言
这段时间事比较多,十一还回了趟老家,回顾一下上一篇简单讲了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使用...相关推荐
- windows下客户端连接上马上会断开连接_Fix SSH客户端登录会话超时设置
通常默认公有云上的ECS远程连接,很容易断开,当你有什么事情被打断或者去操作别的机器同步做点其他事情,你会发现你SSH客户端登录窗口经常会断开掉,非常烦人,经常要重新登录. 如果用一些Windows下 ...
- windows下客户端连接上马上会断开连接_Tunneller VS DCOM,稳定性更高的连接!
前言 上周我们给大家展示了使用OPC Tunneller完成OPC通信的方法,有了Tunneller以后我们不再需要进行繁琐的DCOM的配置,也能正常的进行OPC通信.同时也谈到了如果OPC Tunn ...
- windows下客户端连接上马上会断开连接_浅尝Java NIO与Tomcat简单连接调优
P本文使用jdk1.8.0_45spring boot 2.1.4.RELEASE 涉及源码都放在https://github.com/sabersword/Nio 前因 这周遇到一个连接断开的问题, ...
- windows下用XShell远程ubuntu时连接失败
现象描述:Ubuntu能Ping通主机,主机也能ping通虚拟机.但是windows下用XShell远程ubuntu时连接失败. 解决方案: 步骤: 1.查看一下防火墙状态:sudo ufw disa ...
- qt客户端连接服务器不响应,qt判断tcp客户端是否连接服务器
qt判断tcp客户端是否连接服务器 内容精选 换一换 本章节指导您使用MongoDB客户端,通过弹性云服务器内网方式连接GaussDB(for Mongo)集群实例.操作系统使用场景:弹性云服务器的操 ...
- linux下socket编程实现一个服务器连接多个客户端
使用socekt通信一般步骤 1)服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接. 2)客户端:socker()建立套接字,连接(con ...
- 客户端主动断开连接_Go实现客户端和服务器抓包分析TCP三次握手和断开操作
本文主要是想通过抓包工具分析一下TCP三次握手和断开过程: 1.TCP三次握手建立连接和断开连接解释,如下图: TCP三次握手建立连接和断开连接 2.通过WireShark抓包查看这个TCP过程,数据 ...
- dmb显示服务器断开连接,dmb联网信息发布系统操作手册企业加强版.docx
Document number:PBGCG-0857-BTDO-0089-PTT1998 Document number:PBGCG-0857-BTDO-0089-PTT1998 DMB联网信息发布系 ...
- 客户端连接mysql 自动断开_MySql连接空闲8小时自动断开的原因及连接池配置方法...
数据库连接超时时间查询 非交互式超时时间,如 JDBC 程序 show global variables like 'wait_timeout'; 交互式超时时间,如数据库工具 show global ...
- Windows下最简洁的Linux远程连接软件
一直在找Linux远程连接软件,都发现不够简洁,清爽.直到最近发现了 putty 这个软件.先放一张效果图! 比较清爽吧!下面介绍下他的使用! 下载地址: 官方地址:https://www.chiar ...
最新文章
- Beyond MySQL --Branching the popular database--转载
- JVM---堆(逃逸分析与代码优化)
- 八进制数输出二进制c语言,C语言 某数输出二进制的某位
- iPhone之横竖屏与自动旋转
- [九]RabbitMQ-客户端源码之Consumer
- 洛谷P4841 城市规划(多项式求逆)
- 前端学习(3152):react-hello-react之初始化react
- JEasyPoi 2.1.4 (Jeecg订制) 版本发布,Excel 和 Word 简易工具类
- AI 算法在 FPGA 芯片上还有这种操作?
- oracle 修索引改空间_oracle 修改索引现有表空间
- 剑指offer--两个链表的第一个公共结点
- 手动实现一维离散数据小波分解与重构
- 惠普触控板使用指南_惠普笔记本触摸板使用技巧
- linux怎么查看hwaddr_Linux查看MAC地址方法
- C语言 —— char类型的使用(二)
- Windows免杀木马+维持权限(shellter)
- 遥感(4):卫星遥感图像处理
- matlab使用杂谈5-fftshift函数的使用
- PTA 7-194 循环结构 —— 中国古代著名算题。趣味题目:物不知其数。
- 招聘|蔚来汽车招感知算法工程师(Intern)