Zookeeper--Java API
準備
- windows上構建機器名稱與IP的對映
C:\Windows\System32\drivers\etc
下的hosts檔案
192.168.100.203 node-01
192.168.100.204 node-02
192.168.100.205 node-03
建立節點
package bigdata.hanjiaxiaozhi.cn.zookeeper;
import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.zookeeper.CreateMode;
import org.junit.Test;
/**
* @ClassName ZkClientTest
* @Description TODO 實現自定義開發Zookeeper的JavaAPI
* 建立節點
* 檢視資料
* 修改資料
* 設定監聽
* @Date 2020/5/25 11:40
* @Create By hanjiaxiaozhi
*/
public class ZkClientTest {
/**
* 建立節點
*/
@Test
public void createZnode() throws Exception {
//todo:1-構建連線
//引數1:zookeeper的地址,可以寫一臺的地址,也可以寫多臺,用逗號隔開即可,也只連線一臺,如果一臺連線不上,會連線其他的
//引數2:重試的機制
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,5);//第一個引數代表重試的間隔時間,第二個參數列示重試的次數
//如果你們的Windows上沒有配置Linux機器名稱的對映,你們這裡寫IP地址
//如何設定對映
// Linux 上的對映:/etc/hosts
// windows上的對映:C:\Windows\System32\drivers\etc\hosts
CuratorFramework client = CuratorFrameworkFactory.newClient("node-01:2181,node-02:2181,node-03:2181", retryPolicy);
//啟動客戶端連線
client.start();
//todo:2-實現操作
//建立一個持久節點,creatingParentsIfNeeded:如果父節點不存在,先建立父節點
//withMode:指定節點型別
client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath("/hanjiaxiaozhi","My name is Tom".getBytes());
//todo:3-釋放連線
client.close();
}
}
獲取資料
/**
* 獲取節點的資料
*/
@Test
public void getZnodeData() throws Exception {
//todo:1-構建連線
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,5);
CuratorFramework client = CuratorFrameworkFactory.newClient("node-01:2181,node-02:2181,node-03:2181", retryPolicy);
client.start();
//todo:2-實現操作
//獲取對應節點的資料
byte[] datas = client.getData().forPath("/hanjiaxiaozhi");
//列印在控制檯
System.out.println(new String(datas));
//todo:3-釋放連線
client.close();
}
修改資料
/**
* 修改節點的值
*/
@Test
public void setZnodeData() throws Exception {
//todo:1-構建連線
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,5);
CuratorFramework client = CuratorFrameworkFactory.newClient("node-01:2181,node-02:2181,node-03:2181", retryPolicy);
client.start();
//todo:2-實現操作
//修改節點的值
client.setData().forPath("/hanjiaxiaozhi","My name is heima".getBytes());
//todo:3-釋放連線
client.close();
}
設定監聽器
/**
* 實現監聽
* @throws Exception
*/
@Test
public void setZnodeWatch() throws Exception {
//todo:1-構建連線
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,5);
CuratorFramework client = CuratorFrameworkFactory.newClient("node-01:2181,node-02:2181,node-03:2181", retryPolicy);
client.start();
//todo:2-實現操作
//構建一個監聽器:JavaAPI中的監聽是迴圈持久的,不同於Linux命令列中的監聽是一次性的
TreeCache treeCache = new TreeCache(client,"/hanjiaxiaozhi");
//獲取觸發的監聽
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()+"資料:"+ new String(data.getData()));
break;
case NODE_UPDATED:
System.out.println("NODE_UPDATED:"+data.getPath()+"資料:"+ new String(data.getData()));
break;
case NODE_REMOVED:
System.out.println("NODE_REMOVED:"+data.getPath()+"資料:"+ new String(data.getData()));
break;
default:
break;
}
}else{
System.out.println("Data is null :"+event.getType());
}
}
});
//開啟監聽
treeCache.start();
Thread.sleep(10000000000000L);
//關閉監聽
treeCache.close();
//todo:3-釋放連線
client.close();
}
相關文章
- 免費常用API介面:簡訊API,天氣API,快遞API,識別API...API
- GraphQL API vs REST APIAPIREST
- 熱門免費api介面:含物流api,簡訊api,天氣api等API
- 【API】api 下 session 的 Yes or No?APISession
- 筆記:API 和 Web API筆記APIWeb
- api和api幫助文件API
- 熱門免費API介面,含天氣api、物流API、企業工商API等API
- 重學 JavaScript API - Page Visibility APIJavaScriptAPI
- 搞懂 API ,API 分類全知道API
- 重學 JavaScript API - Broadcast Channel APIJavaScriptAPIAST
- API 測試 | 瞭解 API 介面測試 | API 介面測試指南API
- SAP API management portal - 如何建立API providerAPIIDE
- linux使用者api和核心apiLinuxAPI
- API測試:瞭解API介面測試與API介面測試指南API
- 免費API介面大全分享,含簡訊API、IP查詢API等API
- normalizr APIORMAPI
- API 之下API
- rest apiRESTAPI
- Assistants APIAPI
- 【PYQT】APIQTAPI
- [PYQT] APIQTAPI
- WebSocket APIWebAPI
- dingo APIGoAPI
- 常用APIAPI
- API文件API
- Flink APIAPI
- select()APIAPI
- Android APIAndroidAPI
- OpenAI APIOpenAIAPI
- Stream APIAPI
- API資料加密框架monkey-api-encryptAPI加密框架
- Android API相容,其他API,UI適配(2)AndroidAPIUI
- Spark API 全集(1):Spark SQL Dataset & DataFrame APISparkAPISQL
- API Star:一個 Python 3 的 API 框架APIPython框架
- API集合:免費、好用、熱門的APIAPI
- 二十三、Flink Table API之基本APIAPI
- API集錦:免費好用的API介面API
- 寶藏API:免費好用的api分享API