1. 程式人生 > >Zookeeper Client基礎操作和Java調用

Zookeeper Client基礎操作和Java調用

with mov 密碼 als pda 實現 zook session client

## Zookeeper

> Zookeeper目前用來做數據同步,再各個服務之前同步關鍵信息

i.客戶端操作

1. 創建
create [-s] [-e] path data acl
-s 為順序節點 -e 為臨時節點(臨時節點在會話消失後即消失)
acl為權限控制,權限控制比較麻煩,而且只存在於此節點和此級,其子節點不受控制

2. 讀取
ls :
ls path
列出此節點下的所有子節點
get:
get path
獲取此節點的內容和屬性
3. 更新
set path data [version]
version為可選,選擇基於哪個版本更新
4. 刪除
delete path [version]
5. 權限
在Zookeeper的那本書的第215頁有詳細介紹
這裏使用的是digest加密方式,使用Zookeeper提供的方法加密

ii. Java客戶端操作

代碼地址: ZKService.java

1. 初始化客戶端
```java
private CuratorFramework client = CuratorFrameworkFactory.builder()
.connectString(ZOOKEEPER的IP)
.retryPolicy(new ExponentialBackoffRetry(1000, 6))
.sessionTimeoutMs(5000)
.namespace(以哪個地址為基準)
.authorization(加密方式, 密碼)
.build();
```
2. 註冊監聽
```java
private void watch(String path) {
ExecutorService tp = Executors.newFixedThreadPool(2);
System.out.println(Thread.currentThread().getName());
PathChildrenCache cache = new PathChildrenCache(這裏把初始化的客戶端傳進來, 這裏傳入監聽的地址, true, false, tp);
try {
cache.start(PathChildrenCache.StartMode.NORMAL);
} catch (Exception e) {
e.printStackTrace();
}
cache.getListenable().addListener(new PathChildrenCacheListener() {
public void childEvent(CuratorFramework client,
PathChildrenCacheEvent event) throws Exception {
switch (event.getType()) {
case CHILD_ADDED://這裏三個switch分別對應三個操作,裏面寫實現的業務邏輯
listenService.initUser(new String(event.getData()));event.getData()是獲取數據
break;
case CHILD_UPDATED:
break;
case CHILD_REMOVED:
break;
default:
break;
}
}
});
}
```

3. 創建
```
String path = "自定義";
try {
client.getClient().create()
.withMode(CreateMode.PERSISTENT_SEQUENTIAL)//這個是順序持久節點(自動按照順序給節點前加數字),SEQUENTIAL是單純的持久節點
.forPath(這裏傳地址, "這裏傳數據");
} catch (Exception e) {
e.printStackTrace();
}
```

Zookeeper Client基礎操作和Java調用