標籤:switch ssi cas space delete tor sys 用戶端 enc
## 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調用