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);
}
}