baojun521-zookeeper-master.zip

  • hhndher
    了解作者
  • Java
    开发工具
  • 17KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 0
    下载次数
  • 2021-04-14 22:26
    上传日期
x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT。强大的代码生成器让前后端代码一键生成
baojun521-zookeeper-master.zip
内容介绍
package com.lines.curator; import org.apache.curator.RetryPolicy; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.api.BackgroundCallback; import org.apache.curator.framework.api.CuratorEvent; import org.apache.curator.retry.ExponentialBackoffRetry; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.data.Stat; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.util.List; /** * <p> * <code>CuratorTest</code> * </p> * * @Author junbao3 * @Description TODO * @date 2021/4/13 10:20 */ public class CuratorTest { private CuratorFramework client; @Before public void testConnect(){ /** * Create a new client * * @param connectString 连接字符串 zk地址和端口 "47.104.27.199:2181" * 集群方式 "47.104.27.199:2181,47.104.27.198:2181" * @param sessionTimeoutMs 会话超时时间 毫秒 * @param connectionTimeoutMs 连接超时时间 毫秒 * @param retryPolicy 重试策略 * @return client */ //重试策略 每3秒试一次 试10次 RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000,10); // //第一种方式 // CuratorFramework client = CuratorFrameworkFactory.newClient("47.104.27.199:2181", 60 * 1000, 15 * 1000, retryPolicy); // //开启连接 // client.start(); //第二种方式 client = CuratorFrameworkFactory.builder().connectString("47.104.27.199:2181") .sessionTimeoutMs(60 * 1000) .connectionTimeoutMs(15 * 1000) .retryPolicy(retryPolicy).namespace("lines").build(); //名称空间的意义 起到一个隔离的作用 后续所有操作都在lines目录下 //例如 create /app1 实际命令是 create /lines/app1 client.start(); } /* 创建节点 create 持久 临时 顺序 设置数据 1.基本创建 create().forPath("") 2.创建节点 带有数据 create().forPath("",data) 3.设置节点类型 create().withMode().forPath("") 4.创建多级节点 /app1/p1 create().creatingParentsIfNeeded().forPath("") */ @Test public void testCreate() throws Exception { //1.基本创建 如果创建节点 没有指定数据 则默认将当前客户端的ip作为数据存储 //虽然此处写的是 /app1 返回值也是 /app1 但是实际在zookeeper 创建的是 /lines/app1 // String path = client.create().forPath("/app1"); // System.out.println(path); //2.创建节点 带有数据 // String path = client.create().forPath("/app2","hehe".getBytes()); // System.out.println(path); //3.设置节点类型 //默认类型 持久化节点 //此处创建临时 临时的含义是 会话结束 临时的节点就删除 // 此处虽然执行成功 但是后面调用了close方法 会话结束 所以命令行看不到 //想要命令行客户端看见 该方法后面写死循环 //带有死循环的方法结束 命令行客户端发现 app3还在 因为这边的方法是意外停止 所以没有正常删除 // String path = client.create().withMode(CreateMode.EPHEMERAL).forPath("/app3","hehe".getBytes()); // System.out.println(path); // while(true){ // // } //4.创建多级节点 /app1/p1 //org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /lines/app4/p1 //父节点不存在 不允许创建子节点 命令行也是不可以的 String path = client.create().creatingParentsIfNeeded().forPath("/app4/p1","hehe".getBytes()); System.out.println(path); } /* 查询节点 1.查询数据 get getData 2.查询子节点 ls / getChildren 3.查询节点状态信息 ls -s getData().storingStatIn() */ @Test public void testGet1() throws Exception { //1.查询数据 get byte[] data = client.getData().forPath("/app1"); System.out.println(new String(data)); } @Test public void testGet2() throws Exception { //查询子节点 ls / //此处写/ 相当于 是ls /lines 名称空间的存在 List<String> path = client.getChildren().forPath("/app4"); // List<String> path = client.getChildren().forPath("/"); System.out.println(path); } @Test public void testGet3() throws Exception { //查询节点状态信息 ls -s Stat status = new Stat(); System.out.println(status); client.getData().storingStatIn(status).forPath("/app4"); System.out.println(status); } /* 1.修改数据 2.根据版本 修改(多个客户端或者多个线程操作同一个数据 a改了一下 b又改了一下 a再查 发现 结果不是自己修改的) client.setData().withVersion(version).forPath version是查询出来的 目的就是为了让其他客户端或者线程不干扰本次操作 */ @Test public void testSet() throws Exception { client.setData().forPath("/app1","hello zookeeper".getBytes()); } @Test public void testSetForVersion() throws Exception { //先查数据的版本 然后修改时把数据的版本当做参数传入 //查 和改 直接 version是不变的 才能修改成功 Stat status = new Stat(); client.getData().storingStatIn(status).forPath("/app1"); int version = status.getVersion(); System.out.println(version); client.setData().withVersion(version).forPath("/app1","hello".getBytes()); // client.setData().withVersion(100).forPath("/app1","xixi".getBytes()); //org.apache.zookeeper.KeeperException$BadVersionException: KeeperErrorCode = BadVersion for /lines/app1 } /* 删除操作 delete deleteall 删除带有子节点的 递归删除 1.删除单个节点 2.删除带有子节点的节点 3.必须成功的删除 4.回调 */ @Test public void testDelete() throws Exception { client.delete().forPath("/app1"); } @Test public void testDelete2() throws Exception { // client.delete().forPath("/app4"); //有子节点 直接调用delete 报错 //org.apache.zookeeper.KeeperException$NotEmptyException: KeeperErrorCode = Directory not empty for /lines/app4 client.delete().deletingChildrenIfNeeded().forPath("/app4"); } @Test public void testDelete3() throws Exception { //会话建立了 在会话中超时了 网络抖动 //必须删除 内部是不断的重试 client.delete().guaranteed().forPath("/app2"); } @Test public void testDelete4() throws Exception { //会话建立了 在会话中超时了 网络抖动 //必须删除 内部是不断的重试 client.delete().guaranteed().inBackground(new BackgroundCallback() { @Override public void processResult(CuratorFramework client, CuratorEvent event) throws Exception { System.out.println("我被删除了"); System.out.println(event); /* CuratorEventImpl{type=DELETE, resultCode=0, path='/app1', name='null', children=null, context=null, stat=null, data=null, watchedEvent=null, aclList=null, opResults=null} */ } }).forPath("/app1"); } @After public void close(){ if(client!=null){ client.close(); } } }
评论
    相关推荐
    • Java
      Java 对于Java练习
    • java
      Java Java基础
    • Java
      Java 我创建的Java项目
    • JAVA教程
      一本非常不错的清华大学java教程,讲解非常详细,看了就知道。
    • Java Cipher
      Java Cipher 加密和解密工具 附带源码 Java Cipher 加密和解密工具 附带源码 Java Cipher 加密和解密工具 附带源码 Java Cipher 加密和解密工具 附带源码
    • javabank
      Java银行 Java com的模拟操作将在bancárias上发布! 要求:Java 8。
    • java 李兴华
      java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java ...
    • Java204
      支持中文,支持动态注释的超强Java语言反编译器。 注意:Java204的工作目录中不能包含中文字符!! 支持现有所有Java环境产生的Class代码,而最重要的是它生成的源代码可读性极好,又充分考虑了国人的Java编码习惯,...
    • java程序
      java程序-吃点点java程序-吃点点java程序-吃点点java程序-吃点点java程序-吃点点java程序-吃点点
    • Java
      Java 2021/02/19 .java Main.java 学生.java Bmi.java 。班级 Bmi类 主类 MyBmi.class 学生班 学生样本类 2021/02/20 .java DeleteFile.java WriteFile.java MyDataPrint.java 。班级 DeleteFile.class ...