zookeeper的javaAPI

zk的API操作步骤:

1,在https://mvnrepository.com/知道相对应的包(原生框架不好用)
2,推荐使用http://curator.apache.org/curator-framework/index.html框架
3,新建工程
在这里插入图片描述
删除src,添加一个新的模板
在这里插入图片描述
4,导包

<!--依赖-->
<dependencies>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>2.12.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>2.12.0</version>
    </dependency>
    <dependency>
        <groupId>com.google.collections</groupId>
        <artifactId>google-collections</artifactId>
        <version>1.0</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
        <!--scope有四个取值,test(只在测试时候用) provided comlile 默认值-->
    </dependency>
</dependencies>
<!--插件-->
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.2</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

备注:
如果依赖包下载不下来,直接将jar包解压到本地的maven仓库
在这里插入图片描述
1,此时在idea中刷新插件,看是否成功
2,如果还不成功,在本地的maven仓库中,将残留的还未下载完成的插件删除
(搜索lastupdated,将所有的都删除,重新刷新)
3,如果还是不行,直接换maven的版本

5,hosts的地址
C:\Windows\System32\drivers\etc

具体代码

package zk.demo1;

import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.cache.ChildData;
import org.apache.curator.framework.recipes.cache.TreeCache;
import org.apache.curator.framework.recipes.cache.TreeCacheEvent;
import org.apache.curator.framework.recipes.cache.TreeCacheListener;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.data.Stat;
import org.junit.Test;

public class ZKOperate {
    @Test
    public void createNode() throws Exception {
        //定义重试机制,retry的第一个参数意思为尝试的时间(3000ms)  第二个参数为尝试次数3次
        ExponentialBackoffRetry retry = new ExponentialBackoffRetry(3000,3);
        //得到客户端
        CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient("hadoop11:2181,hadoop12:2181,hadoop13:2181", retry);
        //开始服务端
        curatorFramework.start();

        //创建持久节点

        curatorFramework.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath("/hello/abc","helloword".getBytes());




        //停止服务端
        curatorFramework.close();

    }
    @Test
    public void createTempNode() throws Exception {

        ExponentialBackoffRetry retry = new ExponentialBackoffRetry(3000, 3);
        CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient(
                "hadoop11:2181,hadoop12:2181,hadoop13:2181", retry);
        curatorFramework.start();

        curatorFramework.create()
                .creatingParentsIfNeeded()
                .withMode(CreateMode.EPHEMERAL)
                .forPath("/linshi/abc","linshi".getBytes());


        Thread.sleep(8000);

        curatorFramework.close();


    }

    @Test
    public void updateNode() throws Exception {
        CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient(
                "hadoop11:2181,hadoop12:2181,hadoop13:2181",
                new ExponentialBackoffRetry(3000,3));


        curatorFramework.start();

         curatorFramework.setData().forPath("/bb01", "bbbb".getBytes());


        curatorFramework.close();
    }


    @Test
    public void getNode() throws Exception {
        CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient("" +
                        "hadoop11:2181,hadoop12:2181,hadoop13:2181",
                new ExponentialBackoffRetry(3000, 3));

        curatorFramework.start();

        byte[] bytes = curatorFramework.getData().forPath("/bb01");

        String s = new String(bytes);

        System.out.println(s);
        curatorFramework.close();
    }

    /*
    zk的watch机制
     */
    @Test
    public void wartchNode() throws Exception {

        CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient("hadoop11:2181,hadoop12:2181,hadoop13:2181",
                new ExponentialBackoffRetry(3000, 3));
        curatorFramework.start();

        TreeCache treeCache = new TreeCache(curatorFramework, "/bb01");

        treeCache.getListenable().addListener(new TreeCacheListener() {
            @Override
            public void childEvent(CuratorFramework curatorFramework, TreeCacheEvent event) throws Exception {
                ChildData data = event.getData();
                if (null !=data){
                    TreeCacheEvent.Type type = event.getType();
                    switch (type){
                        case NODE_ADDED:
                            System.out.println("增加节点");
                            break;
                        case INITIALIZED:
                            System.out.println("节点初始化");
                            break;
                        case NODE_REMOVED:
                            System.out.println("节点删除");
                            break;
                        case NODE_UPDATED:
                            System.out.println("修改节点");
                            break;
                        default:
                            System.out.println("没有操作");
                    }

                }

            }
        });
    treeCache.start();
    Thread.sleep(500000);
    curatorFramework.close();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值