zookeeper提供了兩種語言的api解孙,一種是java的一種是c的,這里我們學(xué)習(xí)java api, c語言的api接口和java的結(jié)構(gòu)是一樣的。
在使用之前首先我們需要將用到的jar包放到classpath以方便編程。
這里通過運行bin/zkEnv.sh 即可將所有jar全部加入到CLASSPATH里面
. $PATH_TO_ZK/bin/zkEnv.sh
vagrant@vagrant-ubuntu-trusty-64:~$ echo $CLASSPATH
/usr/bin/../zookeeper-server/target/classes:/usr/bin/../build/classes:/usr/bin/../zookeeper-server/target/lib/*.jar:/usr/bin/../build/lib/*.jar:/usr/bin/../lib/*.jar:/usr/bin/../zookeeper-*.jar:/usr/bin/../zookeeper-server/src/main/resources/lib/*.jar:/usr/bin/../etc/zookeeper:.:/usr/lib/jvm/java-11-oracle/lib:/usr/lib/jvm/java-11-oracle/lib/tools.jar
zookeeper客戶端和服務(wù)器通過建立連接,創(chuàng)建sesssion來交互
Zookeeper zk = new ZooKeeper(hostPort, 15000, log::info);
其中第一個參數(shù)為server的ip和端口號棚潦,如127.0.0.1:2181
第二個參數(shù)為session失效時間,單位為ms, 當(dāng)ZooKeeper在指定的時間(15s)無法和client連接是膝昆,就會認(rèn)為連接失效丸边。
第三個參數(shù)是一個Watcher,用來獲取并處理session相關(guān)的event荚孵。接口如下妹窖,只有一個方法,所以這里我們直接用了一個lambda表達(dá)式來表示它收叶。
public interface Watcher {
void process(WatchedEvent event);
}
我們再ZooKeeper basic里面介紹的那些客戶端命令骄呼,都有對應(yīng)的API實現(xiàn)版本,同步版和異步版判没,都有蜓萄。
我們寫代碼的時候通常是使用異步版,因為它更好效澄峰,也不要我們來處理很多異常嫉沽,代碼也更簡潔。所以這里我們只介紹異步版實現(xiàn)俏竞。
- 創(chuàng)建節(jié)點
void create(String path, byte[] data, List<ACL> acl,
CreateMode createMode, AsyncCallback.StringCallback cb, Object ctx)
zk.create("/master", serverId.getBytes(), OPEN_ACL_UNSAFE,
CreateMode.EPHEMERAL, this::masterCreateCallback, null);
第一個參數(shù)為要創(chuàng)建znode的路徑绸硕,znode的數(shù)據(jù), 第三個參數(shù)為認(rèn)證方式魂毁, 第四個參數(shù)是創(chuàng)建模式玻佩, 第五個參數(shù)是回調(diào)函數(shù),第六個參數(shù)是回調(diào)函數(shù)的參數(shù)席楚。
我這里提供了一個demo程序大家可以參考咬崔,來學(xué)習(xí)這些api的使用,看代碼更容易理解 git地址如下烦秩,
大家可以git clone https://github.com/Jaler-Wang/ZooKeeperDemo.git
獲取刁赦。