栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Zookeeper Java API的Curator来操作节点

Zookeeper Java API的Curator来操作节点

 

目录

1、将服务器的防火墙关闭

 2、启动zookeeper服务器以及客户端

 3、通过idea创建maven工程

 4、pom.xml配置如下

 5、配置文件

6、节点增删改查

        6.1、连接zookeeper服务

 6.2  释放资源

 6.3 创建节点

6.4 查询节点

6.5 修改节点

6.6 删除节点


1、将服务器的防火墙关闭

使用SecureCRT工具连接服务器,然后关闭防火墙:

systemctl stop firewalld

 2、启动zookeeper服务器以及客户端

--进入到zookeeper安装目录下的bin目录,启动zookeeper服务

./zkServer.sh start

--重新克隆一份会话,然后同样进入zookeeper安装目录下的bin目录,启动客户端

./zkCli.sh     (在本机安装的客户端可以直接使用该操作)

./zkCli.sh -server ip地址:2181(如果客户端不和服务在同一机器上,需要加上服务的ip地址)

 3、通过idea创建maven工程

结构如下所示:

 4、pom.xml配置如下


    4.0.0

    com.flyrain.zk
    curator-zk
    1.0-SNAPSHOT
    

        
            junit
            junit
            4.10
            test
        

        
        
            org.apache.curator
            curator-framework
            4.0.0
        

        
            org.apache.curator
            curator-recipes
            4.0.0
        
        
        
            org.slf4j
            slf4j-api
            1.7.21
        

        
            org.slf4j
            slf4j-log4j12
            1.7.21
        

    


    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.1
                
                    1.8
                    1.8
                
            
        
    
    

 5、配置文件

配置文件下只有日志文件,内容比较简单,如下所示

log4j.rootLogger=off,stdout

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%d{yyyy-MM-dd HH/:mm/:ss}]%-5p %c(line/:%L) %x-%m%n

6、节点增删改查

        6.1、连接zookeeper服务
public class CuratorTest {
    private Curatorframework client;
    @Test
    public void testConZookeeper(){
        //第一种连接策略CuratorframeworkFactory.newClient()
        
        //重试策略
        RetryPolicy retry = new ExponentialBackoffRetry(3000, 3);
        

        //第二种使用CuratorframeworkFactory.builder()链式编程方式
        //namespace()设置名称空间根目录,以后不用每次都写前面
        client = CuratorframeworkFactory.builder()
                .connectString("192.168.117.128:2181")
                .sessionTimeoutMs(90 * 1000)
                .connectionTimeoutMs(15 * 1000)
                .retryPolicy(retry)
                .namespace("flyrain")
                .build();
        //开启连接
        client.start();
    }
}

 6.2  释放资源

如果不报错,则说明连接成功,然后需要对节点进行操作,我们需在执行其他方法时都要先执行上述连接服务操作,将@Test修改为@Before即可,然后连接服务后,我们也需要释放资源,其代码如下:

//释放资源
    @After
    public void closeCurator(){
        if(client != null){
            client.close();
        }
    }

 6.3 创建节点
 
    @Test
    public void createNode(){
        //1.基本创建 ,节点为/flyrain/app1, flyrain作为根节点
        //如果创建节点,没有指定数据,则默认将当前客户端的ip作为数据存储
        try {
            String path = client.create().forPath("/flyrain");
            System.out.println("path : "+path);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    //2.创建带数据的节点
    @Test
    public void testNodeWithData(){
        try {
            String path = client.create().forPath("/app2", "nihao".getBytes());
            System.out.println("path : "+path); ///app2
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    
    //3.创建节点类型
    @Test
    public void testNodeType(){
        try {
            String path = client.create().withMode(CreateMode.EPHEMERAL).forPath("/app3");
            System.out.println("path : "+path); ///app3
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //4.创建多级节点
    @Test
    public void testMoreNode(){
        //creatingParentsIfNeeded :如果父节点不存在,则创建
        try {
            String path = client.create().creatingParentsIfNeeded().forPath("/app4/p1");
            System.out.println("path : "+path); ///app4/p1
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

6.4 查询节点
    @Test
    public void testQueryData(){
        try {
            byte[] data = client.getData().forPath("/app2");
            System.out.println("data: "+new String(data));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //查询子节点
    @Test
    public void testQueryChildNode(){
        try {
            List list = client.getChildren().forPath("/");
            System.out.println(" list "+list);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //查询子节点状态信息
    @Test
    public void testChildStatus(){
        Stat stat = new Stat();
        System.out.println("stat1 : "+stat);
        try {
            byte[] data = client.getData().storingStatIn(stat).forPath("/app2");
            
            System.out.println("stat2 : "+stat.getCtime());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

6.5 修改节点
 
    @Test
    public void testUpdatabaseData(){
        try {
             client.setData().forPath("/app2", "wobuhao".getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //根据版本修改
    @Test
    public void testUpdataDataByVersion(){
        Stat stat = new Stat();
        //查询节点状态信息:
        try {
            client.getData().storingStatIn(stat).forPath("/app2");
            //查询版本信息
            int version = stat.getVersion();
            client.setData().withVersion(version).forPath("/app2", "随遇而安".getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

6.6 删除节点
 
    //删除单个节点
    @Test
    public void testDeleteoneNode(){
        try {
            //app3下无子节点
            client.delete().forPath("/app3");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //删除带有子节点的节点
    @Test
    public void testDeleteNodeWithChildNode(){
        try {
            //app4节点下还有p1子节点
            client.delete().deletingChildrenIfNeeded().forPath("/app4");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //必须删除成功
    @Test
    public void testDeleteNeed(){
        try {
            //flyrain根节点下还有flryain子节点
            client.delete().guaranteed().forPath("/flyrain");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //回调
    @Test
    public void testCallBack(){
        try {
            client.delete().guaranteed().inBackground(new BackgroundCallback() {
                @Override
                public void processResult(Curatorframework client, CuratorEvent event) throws Exception {
                    System.out.println("我被删除了...");
                    System.out.println(event);
                }
            }).forPath("/app2");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

以上就是节点的增删改查操作,我的zookeeper版本是3.5.6版本。

路漫漫其修远兮,吾将上下而求索,希望此篇文章对大家有所帮助......

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/326749.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号