zookeeper Api
**1創(chuàng)建永久節(jié)點(diǎn)
**
@Test
public void createNode() throws Exception {
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 1);
//獲取客戶端對(duì)象
CuratorFramework client = CuratorFrameworkFactory.newClient("192.168.174.100:2181,192.168.174.110:2181,192.168.174.120:2181", 1000, 1000, retryPolicy);
//調(diào)用start開啟客戶端操作
client.start();
//通過(guò)create來(lái)進(jìn)行創(chuàng)建節(jié)點(diǎn),并且需要指定節(jié)點(diǎn)類型
client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath("/hello3/world");
client.close();
}
**2創(chuàng)建臨時(shí)節(jié)點(diǎn)
**
public void createNode2() throws Exception {
RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 1);
CuratorFramework client = CuratorFrameworkFactory.newClient("node01:2181,node02:2181,node03:2181", 3000, 3000, retryPolicy);
client.start();
client.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath("/hello5/world");
Thread.sleep(5000);
client.close();
}
3修改節(jié)點(diǎn)數(shù)據(jù)
/**
* 節(jié)點(diǎn)下面添加數(shù)據(jù)與修改是類似的痹扇,一個(gè)節(jié)點(diǎn)下面會(huì)有一個(gè)數(shù)據(jù)溯香,新的數(shù)據(jù)會(huì)覆蓋舊的數(shù)據(jù)
* @throws Exception
*/
@Test
public void nodeData() throws Exception {
RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 1);
CuratorFramework client = CuratorFrameworkFactory.newClient("node01:2181,node02:2181,node03:2181", 3000, 3000, retryPolicy);
client.start();
client.setData().forPath("/hello5", "hello7".getBytes());
client.close();
}
**4 節(jié)點(diǎn)數(shù)據(jù)查詢
**
/**
* 數(shù)據(jù)查詢
*/
@Test
public void updateNode() throws Exception {
RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 1);
CuratorFramework client = CuratorFrameworkFactory.newClient("node01:2181,node02:2181,node03:2181", 3000, 3000, retryPolicy);
client.start();
byte[] forPath = client.getData().forPath("/hello5");
System.out.println(new String(forPath));
client.close();
}
**5節(jié)點(diǎn)watch機(jī)制
**
/**
* zookeeper的watch機(jī)制
* @throws Exception
*/
@Test
public void watchNode() throws Exception {
RetryPolicy policy = new ExponentialBackoffRetry(3000, 3);
CuratorFramework client = CuratorFrameworkFactory.newClient("node01:2181,node02:2181,node03:2181", policy);
client.start();
// ExecutorService pool = Executors.newCachedThreadPool();
//設(shè)置節(jié)點(diǎn)的cache
TreeCache treeCache = new TreeCache(client, "/hello5");
//設(shè)置監(jiān)聽器和處理過(guò)程
treeCache.getListenable().addListener(new TreeCacheListener() {
@Override
public void childEvent(CuratorFramework client, TreeCacheEvent event) throws Exception {
ChildData data = event.getData();
if(data !=null){
switch (event.getType()) {
case NODE_ADDED:
System.out.println("NODE_ADDED : "+ data.getPath() +" 數(shù)據(jù):"+ new String(data.getData()));
break;
case NODE_REMOVED:
System.out.println("NODE_REMOVED : "+ data.getPath() +" 數(shù)據(jù):"+ new String(data.getData()));
break;
case NODE_UPDATED:
System.out.println("NODE_UPDATED : "+ data.getPath() +" 數(shù)據(jù):"+ new String(data.getData()));
break;
default:
break;
}
}else{
System.out.println( "data is null : "+ event.getType());
}
}
});
//開始監(jiān)聽
treeCache.start();
Thread.sleep(50000000);
}