zookeeper部分简单操作示例

zookeeper 核心作用-----------------保持数据一致性

import org.apache.curator.RetryPolicy;
import org.apache.curator.RetrySleeper;
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.junit.Test;

public class OprZookeeper {

    /*
     *四种节点类型
     * 1 永久节点            PERSISTENT
     * 2 永久节点_序列化     PERSISTENT_SEQUENTIAL
     * 3 临时节点            EPHEMERAL
     * 4 临时节点_序列化     EPHEMERAL_SEQUENTIAL
     */

    /*
     * 创建永久性节点
     */
    @Test
    public void createNode() throws Exception {

        RetryPolicy retryPolicy = new ExponentialBackoffRetry(1, 1000);
        //获取连接对象
        CuratorFramework client = CuratorFrameworkFactory
                .newClient("192.168.222.100:2181,192.168.222.110:2181,192.168.222.120:2181", 1000, 1000, retryPolicy);
        //创建(开始)连接
        client.start();
        //通过连接创建节点
        client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath("/hello3/world");
        //关闭连接
        client.close();
    }


    /*
     * 创建一个临时节点
     */
    @Test
    public void createTempNode() throws Exception {

        RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 1);
        //获取连接对象
        CuratorFramework client = CuratorFrameworkFactory
                .newClient("192.168.222.100:2181,192.168.222.110:2181,192.168.222.120:2181", 3000, 3000, retryPolicy);
        //创建(开始)连接
        client.start();
        //通过连接创建节点
        //临时节点不会有子节点所以再linux查询hello5不必有子节点world
        client.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath("/hello5/world");

        Thread.sleep(5000);
        //关闭连接
        client.close();
    }

    /*
     * 查询节点数据
     */
    @Test
    public void getNodeData() throws Exception {
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 1);
        //获取连接对象
        CuratorFramework client = CuratorFrameworkFactory
                .newClient("192.168.222.100:2181,192.168.222.110:2181,192.168.222.120:2181", 3000, 3000, retryPolicy);
        //创建(开始)连接
        client.start();

        //读取节点中数据
        byte[] nodeData = client.getData().forPath("/hello3/world");

        System.out.println(new String(nodeData));

        client.close();
    }


    /*
     * 修改节点数据
     */
     @Test
    public void updateNodeData() throws Exception {
         RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 1);
         //获取连接对象
         CuratorFramework client = CuratorFrameworkFactory
                 .newClient("192.168.222.100:2181,192.168.222.110:2181,192.168.222.120:2181", 3000, 3000, retryPolicy);
         //创建(开始)连接
         client.start();

         //设置节点中数据
         client.setData().forPath("/hello3/world","updateNodeData".getBytes());
         client.close();
     }

    /*
     * zookeeper 的watch功能
     */
    @Test
    public void watchNode() throws Exception {
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 1);
        //获取连接对象
        CuratorFramework client = CuratorFrameworkFactory
                .newClient("192.168.222.100:2181,192.168.222.110:2181,192.168.222.120:2181", 3000, 3000, retryPolicy);
        //创建(开始)连接
        client.start();

        TreeCache treeCache = new TreeCache(client, "/hello3/world");

        treeCache.getListenable().addListener(new TreeCacheListener() {
            @Override
            public void childEvent(CuratorFramework curatorFramework, TreeCacheEvent event) throws Exception {
                ChildData data = event.getData();
                if(data !=null){
                    switch (event.getType()) {
                        case NODE_ADDED:
                            System.out.println("NODE_ADDED : "+ data.getPath() +"  数据:"+ new String(data.getData()));
                            break;
                        case NODE_REMOVED:
                            System.out.println("NODE_REMOVED : "+ data.getPath() +"  数据:"+ new String(data.getData()));
                            break;
                        case NODE_UPDATED:
                            System.out.println("NODE_UPDATED : "+ data.getPath() +"  数据:"+ new String(data.getData()));
                            break;

                        default:
                            break;
                    }
                }else{
                    System.out.println( "data is null : "+ event.getType());
                }
            }
        });
        //开始监听
        treeCache.start();
        Thread.sleep(50000000);
    }


}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值