如果是使用java操作zookeeper,zookeeper的javaclient 使我們更輕松的去對zookeeper進行各種操作,我們引入zookeeper-3.4.5.jar 和 zkclient-0.1.jar即可。
zookeeper-3.3.4.jar 為官方提供的javaApi,zkClient-0.1jar為在源生api基礎上進行擴展的開源JAVA客戶端
創建會話方法:客戶端可以通過創建一個zookeeper實例來鏈接zookeeper服務器。
Zookeeper(Arguments)方法(一共4個構造方法,根據參數不同)
參數說明如下:
connectString:連接服務器列表,已“,”分割。
sessionTimeOut:心跳檢測時間周期(毫秒)
watcher:事件處理通知器。
canBereadOnly:標識當前會話是否支持只讀。
sessionId和sessionPasswd:提供連接zookeeper的sessionId和密碼,通過這兩個確定唯一一台客戶端,目的是可以提供重復會話
注意:zookeeper客戶端和服務器端會話的建立是一個異步的過程,也就是說在程序中,我們程序方法在處理完客戶端初始化后,立即返回(程序往下執行代碼,這樣,大多數情況下我們並沒有真正構建好一個可用會話,在會話的聲明周期處於"CONNECTING"時才算真正建立完畢,所以我們需要使用多線程中的一個工具類)
要導入的maven依賴
<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
創建一個測試類,我們在test目錄下創建ZkCreateDemo.java
import org.apache.zookeeper.*; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.websocket.Session; import java.io.IOException; /* java操作zookeeper對象 */ public class ZkCreateNodeDemo { private static final Logger logger = LoggerFactory.getLogger(ZkCreateNodeDemo.class); private Session session; String url = "192.168.25.8:2181"; ZooKeeper zk; //初始化 @Before public void test01() throws IOException { zk = new ZooKeeper(url, 3000, new Watcher() { @Override public void process(WatchedEvent event) { String path = event.getPath(); //負責監聽的路徑 Event.KeeperState state = event.getState(); //負責監聽的狀態 Event.EventType type = event.getType(); //負責監聽類型 logger.info("路徑為="+path); logger.info("狀態為="+state); logger.info("監聽類型="+type); } }); } //創建節點 @Test public void createNode() throws Exception{ try { zk.create("/a1", "yangxinlei".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); zk.create("/b1", "yangxinlei12".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); zk.create("/c1", "yangxinlei123".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); }catch (Exception ex){ logger.info("zookeeper創建失敗!"); ex.printStackTrace(); } } //刪除節點 @Test public void deleteNode() throws Exception{ zk.delete("/a1",-1); } //修改節點 @Test public void updateNode() throws Exception{ zk.setData("/b1","testUpdate".getBytes(),-1); } //查詢節點 @Test public void getNode() throws Exception{ byte[] data = zk.getData("/c1", true, null); System.out.println(new String(data)); }
進行單元測試 ,如果不成功,查看一下linux下的防火牆是否關閉,確保自己的linux環境下的防火牆已經關閉,關閉防火牆的命令 service iptables stop
創建節點成功!可以通過兩種方式進行查看
(1) 通過ZooInspector,下載地址為
https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip;
可以看到節點已經被創建出來
或者在linux下開啟客戶端 只需要輸入命令./zkCli.sh 開啟客戶端,然后再輸入ls /進行查看即可