package com.github.guang19.zktest;
import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.cache.NodeCache;
import org.apache.curator.framework.recipes.locks.InterProcessLock;
import org.apache.curator.framework.recipes.locks.InterProcessMutex;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.junit.Before;
import org.junit.Test;
import java.util.concurrent.*;
/**
* @Author yangguang
* @Date 2020/1/29
* @Description TODO 测试Curator操作ZK服务器
*/
public class ZKTest
{
private final String host = "127.0.0.1:2182";
private RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,5);
private final CuratorFramework client = CuratorFrameworkFactory.builder().connectString(host).sessionTimeoutMs(20000).connectionTimeoutMs(20000).retryPolicy(retryPolicy).build();
@Before
public void start()
{
client.start();
}
@Test
public void create1() throws Exception
{
// client.create().forPath("/test1");
//带数据的节点
client.create().forPath("/test2","data".getBytes("UTF-8"));
//指定节点模式创建
// client.create().withMode(CreateMode.EPHEMERAL).forPath("/test3","临时节点".getBytes("UTF-8"));
//如果父节点不存在就连带创建父节点
client.create().creatingParentsIfNeeded().forPath("/test3/test3_1","test3的子节点".getBytes("UTF-8"));
}
@Test
public void delete1() throws Exception
{
//只能删除叶子节点
// client.delete().forPath("/test1");
//强制删除
// client.delete().guaranteed().forPath("/test3");
//可以递归删除子节点
client.delete().deletingChildrenIfNeeded().forPath("/test3");
}
@Test
public void get1() throws Exception
{
System.out.println(new String(client.getData().forPath("/"),"UTF-8"));
System.out.println(new String(client.getData().forPath("/test2"),"UTF-8"));
}
@Test
public void set1() throws Exception
{
// client.setData().forPath("/test2","新值".getBytes("UTF-8"));
client.setData().withVersion(0).forPath("/test2","第三个版本的新值".getBytes("UTF-8"));
}
@Test
public void test01() throws Exception
{
System.out.println(client.checkExists().forPath("/test3"));
}
@Test
public void watch() throws Exception
{
// client.create().forPath("/watch/watch_children","watch的子节点没有改变的数据".getBytes("UTF-8"));
NodeCache nodeCache = new NodeCache(client,"/watch/watch_children");
nodeCache.start(true);
nodeCache.getListenable().addListener(()->{
// System.out.println("node path : " + nodeCache.get());
System.out.println("node data : " + nodeCache.getCurrentData());
System.out.println(new String(nodeCache.getCurrentData().getData(),"UTF-8"));
});
client.setData().forPath("/watch/watch_children","watch的子节点改变后的数据".getBytes("UTF-8"));
// client.delete().forPath("/watch");
TimeUnit.SECONDS.sleep(3);
client.close();
}
//分布式锁测试
@Test
public void zkLock() throws Exception
{
//线程池
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1,5,2000,TimeUnit.SECONDS,new LinkedBlockingQueue<>(5),Executors.defaultThreadFactory(),new ThreadPoolExecutor.DiscardOldestPolicy());
InterProcessLock zkLock = new InterProcessMutex(client,"/zkLock");
for (int i = 0 ; i < 10; ++i)
{
threadPoolExecutor.execute(()->{
try
{
zkLock.acquire();
System.out.println("thread: " + Thread.currentThread().getName() + " has gotten lock");
TimeUnit.SECONDS.sleep(1);
}
catch (Throwable e)
{
}
finally {
try
{
zkLock.release();
System.out.println("thread : " + Thread.currentThread().getName() + " has released lock");
}
catch (Throwable e)
{
}
}
});
}
TimeUnit.SECONDS.sleep(20);
threadPoolExecutor.shutdown();
client.close();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Zookeeper学习 Zookeeper是一个由Java编写并开源的,为分布式系统提供协调服务的框架. Zookeeper概述 Zookeeper最早起源于雅虎研究院的一个小组.当时研究人员发现,在雅虎内部的很多系统基本都依赖一个类似的系统来进行分布式服务协调, 但这些系统往往都存在分布式单点问题.所以雅虎的工程师试图开发一个无单点问题的分布式协调框架,以便让开发者集中精力在业务逻辑上. 由于雅虎的内部项目都采用动物的名字命名,于是这个分布式协调框架便叫做Zookeeper. Zookeeper是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于Zookeeper实现诸如:分布式协调/通知,集群管理,Master选举, 分布式锁,分布式队列,命名服务,数据发布/订阅,负载均衡等功能. Zookeeper非常常用的一个场景是作为服务生产者和消费者的注册中心.服务生产者将自己提供的服务注册到Zookeeper,服务的消费者在进行服务 调用时,先从Zookeeper获取服务生产者的信息,再调用服务生产者的数据和内容. Zookeeper特点 1. ZK本身就是一个分布
资源推荐
资源详情
资源评论
收起资源包目录
zookeeper-learning.zip (3个子文件)
pom.xml 1KB
src
test
java
com
github
guang19
zktest
ZKTest.java 5KB
Zookeeper.md 14KB
共 3 条
- 1
资源评论
榴莲酱csdn
- 粉丝: 488
- 资源: 352
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功