Curator框架對zookeeper進行節點操作
https://github.com/Netflix/curator
http://curator.apache.org/
Java中可以利用Curator框架進行對zookeeper的相關操作
<dependencies>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.google.collections</groupId>
<artifactId>google-collections</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
操作節點的代碼:
@Test
public void createNode() throws Exception {
//要連接的zookeeper的所在虛擬機路徑
String connString = "node01:2181,node02:2181,node03:2181";
RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 3);
//獲取客戶端對象
CuratorFramework client = CuratorFrameworkFactory.newClient(connString, retryPolicy);
//通過客戶端對象開啓客戶端操作
client.start();
//創建永久節點
client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath("/createNode03");
//修改節點數據
client.setData().forPath("/createNode03", "hello".getBytes());
//查詢節點數據
byte[] bytes = client.getData().forPath("/createNode03");
System.out.println(new String(bytes));
client.close();
}
設置監聽的代碼:
@Test
public void myWatch() throws Exception {
CuratorFramework client = CuratorFrameworkFactory.newClient("node01:2181", new ExponentialBackoffRetry(3000, 3));
client.start();
//設置節點的TreeCache
TreeCache treeCache = new TreeCache(client, "/createNode03");
//通過匿名內部類設置監聽
treeCache.getListenable().addListener(new TreeCacheListener() {
@Override
public void childEvent(CuratorFramework client, TreeCacheEvent event) throws Exception {
GetDataBuilder data = client.getData();
if(data != null){
switch (event.getType()){
case NODE_ADDED:
System.out.println("添加節點");
break;
case NODE_UPDATED:
System.out.println("更新節點數據");
break;
//...
default:break;
}
}
}
});
//開始執行監聽
treeCache.start();
Thread.sleep(5000000);
}