Zookeeper客户端Curator的使用,简单高效

Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeeper客户端的开发量。

1.引入依赖:

<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>4.0.0</version>
</dependency>
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>4.0.0</version>
</dependency>

2。 curator 简单操作实例

public class CuratorDemo {

	public static void main(String[] args) throws Exception {
		CuratorFramework curatorFramework = CuratorFrameworkFactory.builder() // 获取构造器
				.connectString("192.168.254.135:2181," + "192.168.254.136:2181,192.168.254.137:2181") // 集群地址
				.sessionTimeoutMs(4000) // session超时事件
				.retryPolicy(new ExponentialBackoffRetry(1000, 3)) // 重试机制
				.namespace("curator") // 命名构建 根节点
				.build(); // 构造

		curatorFramework.start();// 启动 连接

		// 结果: /curator/mic/node1
		// 原生api中,必须是逐层创建,也就是父节点必须存在,子节点才能创建
		String path = curatorFramework.create() // 创建节点
				.creatingParentsIfNeeded() // 如果需要创建父节点
				.withMode(CreateMode.PERSISTENT) // 选择节点类型
				.forPath("/wuzz/node1","1".getBytes()); // 路径及值
		System.out.println(path);

		Stat stat = new Stat();
		curatorFramework.getData() // 获取
				.storingStatIn(stat).forPath("/wuzz/node1");
		System.out.println(stat);

		curatorFramework.setData() // 修改
				.withVersion(stat.getVersion()).forPath("/wuzz/node1", "xx".getBytes());

		curatorFramework.delete()// 删除
				.deletingChildrenIfNeeded().forPath("/mic/node1");

		curatorFramework.close();// 关闭连接

	}
}

监听事件实例:

public class CuratorWatcherDemo {

    public static void main(String[] args) throws Exception {
    	
    	CuratorFramework curatorFramework = CuratorFrameworkFactory.builder() // 获取构造器
				.connectString("192.168.254.135:2181," + 
						"192.168.254.136:2181,192.168.254.137:2181") // 集群地址
				.sessionTimeoutMs(4000) // session超时事件
				.retryPolicy(new ExponentialBackoffRetry(1000, 3)) // 重试机制
				.namespace("curator") // 命名构建 根节点
				.build(); // 构造

		curatorFramework.start();// 启动 连接
        //当前节点的创建和删除事件监听 ---永久的
//        addListenerWithNodeCache(curatorFramework,"/wuzz");
        //子节点的增加、修改、删除的事件监听
        addListenerWithPathChildCache(curatorFramework,"/wuzz");
        //综合节点监听事件
//        addListenerWithTreeCache(curatorFramework,"/wuzz");
        System.in.read();
    }

    public static void addListenerWithTreeCache(CuratorFramework curatorFramework,String path) throws Exception {
        TreeCache treeCache=new TreeCache(curatorFramework,path);
        TreeCacheListener treeCacheListener=new TreeCacheListener() {
            @Override
            public void childEvent(CuratorFramework client, TreeCacheEvent event) throws Exception {
                System.out.println(event.getType()+"->"+event.getData().getPath());
            }
        };

        treeCache.getListenable().addListener(treeCacheListener);
        treeCache.start();
    }

    /**
     * PathChildCache 监听一个节点下子节点的创建、删除、更新
     * NodeCache  监听一个节点的更新和创建事件
     * TreeCache  综合PatchChildCache和NodeCache的特性
     */

    public static void addListenerWithPathChildCache(CuratorFramework curatorFramework,String path) throws Exception {
        PathChildrenCache pathChildrenCache=new PathChildrenCache(curatorFramework,path,true);

        PathChildrenCacheListener pathChildrenCacheListener=new PathChildrenCacheListener() {
            @Override
            public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {
                System.out.println("Receive Event2:"+event.getType());
            }
        };

        pathChildrenCache.getListenable().addListener(pathChildrenCacheListener);
        pathChildrenCache.start(PathChildrenCache.StartMode.NORMAL);

    }

    // 监听一个节点的更新,创建/wuzz节点事件
    public static void addListenerWithNodeCache(CuratorFramework curatorFramework,String path) throws Exception {
        final NodeCache nodeCache=new NodeCache(curatorFramework,path,false);
        NodeCacheListener nodeCacheListener=new NodeCacheListener() {
            @Override
            public void nodeChanged() throws Exception {
                System.out.println("Receive Event1:"+nodeCache.getCurrentData().getPath());
            }
        };
        nodeCache.getListenable().addListener(nodeCacheListener);
        nodeCache.start();
    }
}

  简单实用,敲起来就是一把舒服。。。

转载于:https://www.cnblogs.com/wuzhenzhao/p/9995230.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值