運行 zkCli.sh –server <ip:port>
進入命令行工具,鏈接後使用help能夠查看全部命令:java
1.使用 ls 命令來查看當前 ZooKeeper 中所包含的內容:node
[zk: 202.115.36.251:2181(CONNECTED) 1] ls /
2.建立一個新的 znode ,使用 create /zk myData 。這個命令建立了一個新的 znode 節點「 zk 」以及與它關聯的字符串:git
[zk: 202.115.36.251:2181(CONNECTED) 2] create /zk "myData「
3.咱們運行 get 命令來確認 znode 是否包含咱們所建立的字符串:github
[zk: 202.115.36.251:2181(CONNECTED) 3] get /zk
監聽這個節點的變化,當另一個客戶端改變/zk時,它會打印下面的apache
[zk: localhost:2181(CONNECTED) 4] get /zk watch WATCHER:: WatchedEvent state:SyncConnected type:NodeDataChanged path:/zk
4.下面咱們經過 set 命令來對 zk 所關聯的字符串進行設置:數組
[zk: 202.115.36.251:2181(CONNECTED) 4] set /zk "zsl「
5.下面咱們將剛纔建立的 znode 刪除:ide
[zk: 202.115.36.251:2181(CONNECTED) 5] delete /zk
6.若是znode下面有子節點,用delete是刪除不了的,要用遞歸刪除:rmr函數
[zk: 202.115.36.251:2181(CONNECTED) 5] rmr /zk
實際測試:工具
[root@BC-VM-edce4ac67d304079868c0bb265337bd4 zookeeper-3.4.6]# bin/zkCli.sh -127.0.0.1:2181 Connecting to localhost:2181 2015-06-11 10:55:14,387 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT ... [zk: localhost:2181(CONNECTED) 5] help ZooKeeper -server host:port cmd args connect host:port get path [watch] ls path [watch] set path data [version] rmr path delquota [-n|-b] path quit printwatches on|off create [-s] [-e] path data acl stat path [watch] close ls2 path [watch] history listquota path setAcl path acl getAcl path sync path redo cmdno addauth scheme auth delete path [version] setquota -n|-b val path
下面測試一下經常使用的命令:測試
[zk: localhost:2181(CONNECTED) 6] create /zktest mydata Created /zktest [zk: localhost:2181(CONNECTED) 12] ls / [zktest, zookeeper] [zk: localhost:2181(CONNECTED) 7] ls /zktest [] [zk: localhost:2181(CONNECTED) 13] get /zktest mydata cZxid = 0x1c ctime = Thu Jun 11 10:58:06 CST 2015 mZxid = 0x1c mtime = Thu Jun 11 10:58:06 CST 2015 pZxid = 0x1c cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 0 [zk: localhost:2181(CONNECTED) 14] set /zktest junk cZxid = 0x1c ctime = Thu Jun 11 10:58:06 CST 2015 mZxid = 0x1f mtime = Thu Jun 11 10:59:08 CST 2015 pZxid = 0x1c cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 4 numChildren = 0 [zk: localhost:2181(CONNECTED) 15] delete /zktest [zk: localhost:2181(CONNECTED) 16] ls / [zookeeper]
org.apache.zookeeper.Zookeeper是客戶端入口主類,負責創建與server的會話。
它提供了以下幾類主要方法:
功能 | 描述 |
---|---|
create | 在本地目錄樹中建立一個節點 |
delete | 刪除一個節點 |
exists | 測試本地是否存在目標節點 |
get/set data | 從目標節點上讀取 / 寫數據 |
get/set ACL | 獲取 / 設置目標節點訪問控制列表信息 |
get children | 檢索一個子節點上的列表 |
sync | 等待要被傳送的數據 |
package com.lzumetal.zookeeper.helloworld; import org.apache.zookeeper.*; import org.apache.zookeeper.data.Stat; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; /** * Created by liaosi on 2017/11/18. */ public class SimpleZkClient { private static final Logger log = LoggerFactory.getLogger(SimpleZkClient.class); private static String connectString = "server01:2181,server02:2181,server03:2181"; private static int timeoutMils = 2000; private ZooKeeper zooKeeper; @Before public void init() throws Exception { zooKeeper = new ZooKeeper(connectString, timeoutMils, new Watcher() { //收到事件通知後的回調函數(即咱們本身的實際處理邏輯) @Override public void process(WatchedEvent event) { log.info(event.getPath() + "---->" + event.getType()); } }); } /** * 數據的增刪改查 */ //建立節點 @Test public void testCreate() throws KeeperException, InterruptedException { //參數1:節點的路徑;參數2:節點的數據;參數3:節點的權限;參數4:節點的類型 zooKeeper.create("/idea", "hello zookeeper".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); //上傳的數據能夠是任何類型,但都要轉成byte數組 } //獲取子節點 @Test public void getGetChild() throws KeeperException, InterruptedException { //true表示註冊了建立zookeeper時的監聽器,也能夠從新註冊一個新的監聽器 List<String> childrens = zooKeeper.getChildren("/", true); for (String children : childrens) { log.info(children); } } //判斷節點是否存在 @Test public void testExist() throws KeeperException, InterruptedException { Stat exists = zooKeeper.exists("/idea", true); System.out.println(exists == null ? "Not exist" : "Exist"); } //獲取節點數據 @Test public void testGetData() throws KeeperException, InterruptedException { byte[] data = zooKeeper.getData("/idea", false, null); System.out.println(new String(data)); } //刪除節點 @Test public void testDelete() throws KeeperException, InterruptedException { //-1表示將全部節點都刪除 zooKeeper.delete("/idea", -1); } }
相關代碼以上傳至GitHub:https://github.com/liaosilzu2...