zk java 訪問第一例:
利用java API訪問zookeeper節(jié)點(diǎn)米苹,并創(chuàng)建一個(gè)/controller的節(jié)點(diǎn)糕伐,數(shù)據(jù)為字符串"hellozk".
當(dāng)主線程創(chuàng)建zk連接后,如果狀態(tài)符合要求蘸嘶,才進(jìn)行創(chuàng)建動(dòng)作良瞧; 否則,等待watcher線程狀態(tài)训唱,等等等褥蚯。。况增。等符合要求了再countDown,才創(chuàng)建zk目錄赞庶。使用CountDownLatch可以實(shí)現(xiàn)這個(gè)功能。
實(shí)踐吧少年
package chap4;
import org.apache.zookeeper.*;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
/**
* countdownlatch
* Created by niewj on 2016/12/19.
*/
public class ZkPathCreateTest {
/**
* 計(jì)數(shù):當(dāng)主線程創(chuàng)建zk連接后澳骤,如果狀態(tài)符合要求歧强,才進(jìn)行創(chuàng)建動(dòng)作;
* 否則为肮,等待watcher線程狀態(tài)摊册,等等等。颊艳。丧靡。等符合要求了再countDown,才創(chuàng)建zk目錄。
*/
CountDownLatch cdl = new CountDownLatch(1);
/**
* 連接zk籽暇,并創(chuàng)建一個(gè)目錄節(jié)點(diǎn)。
* @throws IOException
* @throws KeeperException
* @throws InterruptedException
*/
private void init() throws IOException, KeeperException, InterruptedException {
// 1. watcher for zk
Watcher watcherZk = new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
if (Event.KeeperState.SyncConnected == watchedEvent.getState()) {
System.out.println("狀態(tài)::達(dá)到同步連接饭庞;輸出path的狀態(tài): path ==> " + watchedEvent.getState());
cdl.countDown();
} else {
System.out.println("狀態(tài)沒有達(dá)到同步連接的狀態(tài)戒悠,暫時(shí)不作為。舟山。绸狐。卤恳。");
}
}
};
// 2. init zk args
ZooKeeper zk = new ZooKeeper("NIE-00:2181,NIE-01:2181,NIE-02:2181", 6000, watcherZk);
cdl.await();
// 3. create path /controller ephemeral
String stat = zk.create("/controller", "hellozk".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println("created path is -->: " + stat);
}
public static void main(String[] args) {
try {
new ZkPathCreateTest().init();
} catch (IOException e) {
e.printStackTrace();
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
小結(jié):
- ZooKeeper構(gòu)造方法傳遞參數(shù):zk_url, 超時(shí)毫秒數(shù),狀態(tài)監(jiān)視器
- zk.create(path, data, acl列表, 創(chuàng)建的數(shù)據(jù)類型)
- CountDownLatch寒矿,倒數(shù)計(jì)數(shù)線程并發(fā)工具突琳。如果主線程有需要等待的地方,先設(shè)置await(), 在別的線程任務(wù)準(zhǔn)備妥當(dāng)可以突破await處往下走的時(shí)候在等待線程那里countDown()符相,countDown的次數(shù)拆融,使得等待的剩余0個(gè)的時(shí)候,主線程就可以繼續(xù)接下來的動(dòng)作了啊终。這里的話镜豹,就是,zk連接需要等待確認(rèn)狀態(tài)蓝牲,才可以創(chuàng)建節(jié)點(diǎn)趟脂,所以,確認(rèn)狀態(tài)準(zhǔn)備好之后例衍,就在watcher里countDown昔期,然后主線程檢測(cè)到1-1=0,就可以突破await佛玄,執(zhí)行下面的create動(dòng)作了硼一。
燃燒吧,passion