服務端創建
服務端需要安裝在linux系統上,這里以CentOS7為例。
1、進入Zookeeper官網下載Zookeeper鏡像。
官網下載鏈接:http://mirror.bit.edu.cn/apache/zookeeper/
建議選擇最新版

選擇*********bin.tar.gz

下載完成后是linux系統的壓縮包gz包

下載后.gz文件,上傳到linux服務器中的/usr/local下

解壓安裝
命令: tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz
修改名字
命令: mv apache-zookeeper-3.5.6-bin zookeeper-3.5.6
進入解壓后文件夾
命令:cd /usr/local/zookeeper-3.5.6
創建 data 和 log 文件夾
命令: # mkdir data
# mkdir log
進入conf文件夾
命令:cd /usr/local/zookeeper-3.5.6/conf

修改文件名字為zoo.cfg
命令:mv zoo_sample.cfg zoo.cfg
編輯zoo.cfg文件
命令:vim zoo.cfg
修改dataDir路徑為:
dataDir=/usr/local/zookeeper-3.5.6/data
添加dataLogDir:
dataLogDir=/usr/local/zookeeper-3.5.6/log
保存並退出
在路徑 /usr/local/zookeeper-3.5.6下開啟服務
命令:bin/zkServer.sh start

使用命令查詢狀態:bin/zkServer.sh status

客戶端鏈接測試
先下載Zookeeper可視化工具ZooInspector下面是下載鏈接:
https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip;
軟件是壓縮包形式解壓后如下圖
打開build

運行jar文件

打開后如下圖所示

點擊開始按鈕(上圖中紅框內的按鈕)
輸入:ip地址:端口號 比如 192.168.0.1:2181 默認端口號為2181 點擊ok 首次鏈接等待時間較長(注意!如果首次鏈接ip地址輸入錯誤,需要關閉軟件重新連接)

連接成功后如下圖所示:wsl是作者創建的測試節點

java程序鏈接:
首先引入所需依賴,maven依賴(或者找到相應jar包也可以)
<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.10</version> </dependency>
創建測試類
public class ZKDemo { /** * 連接URL */ private static final String CONNECTSTRING = "localhost:2181"; /** * SESSION超時時間 */ private static final int SESSIONTIMEOUT = 10000; /** * 計數器 構造一個用給定計數初始化的對象 參數int類型 */ private static CountDownLatch countDown = new CountDownLatch(1); /** * 創建ZooKeeper對象 */ static ZooKeeper zkClient = null; public static void init() throws Exception { /** * 參數1: 連接URL 參數2: Session超時時間 參數3: Watcher對象 */ zkClient = new ZooKeeper(CONNECTSTRING, SESSIONTIMEOUT, new Watcher() { public void process(WatchedEvent event) { KeeperState state = event.getState(); if (state == state.SyncConnected) { System.out.println("連接成功!"); // countDown()方法 countDown-1 countDown.countDown(); } else { System.out.println("鏈接失敗!"); } System.out.println(event.getType() + "---" + event.getPath()); } }); System.out.println("計數開始···"); // await()方法 countDown為0時繼續執行 countDown.await(); System.out.println("計數結束···"); /** * 設置權限(訪問規則) * 參數1:指權限類型 * world:任何人可以訪問 * auth:通過驗證后可以訪問 * digest:通過賬戶密碼訪問 * url:固定url可以訪問 * 參數2:指用戶名和密碼 格式:username:password */ Id id = new Id("digest",DigestAuthenticationProvider.generateDigest("username:password")); /** * 參數1:訪問范圍 * ALL:全部 * 參數2:訪問規則 */ ACL a = new ACL(Perms.ALL,id); //設置訪問規則集合 List<ACL> list = new ArrayList<ACL>(); list.add(a); /** * 創建節點 * 參數1:節點名 * 參數2:節點內容,需要轉為字節 * 參數3:權限 * Ids.OPEN_ACL_UNSAFE:標識節點的接入權限 * 或者選擇已經創建的List<ACL> 集合 list * 參數4:節點類型 瞬時指close后刪除 * PERSISTENT:持久態 * PERSISTENT_SEQUENTIAL:持久序列化態 * EPHEMERAL:瞬時態 * EPHEMERAL_SEQUENTIAL:序列化瞬時態 */ String create = zkClient.create("/wsl", "hellozk".getBytes(), list, CreateMode.PERSISTENT); System.out.println(create); /** * 讀取節點 * 參數1:權限方式 * 參數2:認證規則(賬號密碼) */ zkClient.addAuthInfo("digest", "admin:123".getBytes()); /** * 獲取數據 * 參數1:讀取的路徑 * 參數2:watcher對象 * 參數3:Stat對象 */ byte[] data = zkClient.getData("/wsl", null, new Stat()); System.out.println(new String(data)); // 關閉 zkClient.close(); } public static void main(String[] args) throws Exception { init(); } }
