基本使用
org.apache.zookeeper.Zookeeper 是客戶端入口主類,負責建立與server的會話,它提供了表1所示幾類主要方法:
功能 描述
create 在本地目錄樹中創建一個節點
delete 刪除一個節點
exists 測試本地是否存在目標節點
get /set data 從目標節點上讀取/寫數據
get /set ACL 獲取/設置目標節點訪問控制列表信息
get children 檢索一個子節點上的列表
sync 等待要被傳送的數據
demo增刪改查
手動引入Zookeeper的jar包
SimpleDemo.java
package testZK
import java.io .IOException
import org.apache .zookeeper .CreateMode
import org.apache .zookeeper .KeeperException
import org.apache .zookeeper .Watcher
import org.apache .zookeeper .ZooDefs .Ids
import org.apache .zookeeper .ZooKeeper
public class SimpleDemo {
// 會話超時時間,設置爲與系統默認時間一致
private static final int SESSION_TIMEOUT = 30000
// 創建 ZooKeeper 實例
ZooKeeper zk
// 創建 Watcher 實例
Watcher wh = new Watcher() {
public void process(org.apache .zookeeper .WatchedEvent event)
{
System.out .println (event.toString ())
}
}
// 初始化 ZooKeeper 實例
private void createZKInstance() throws IOException
{
zk = new ZooKeeper("192.168.230.11:2181" , SimpleDemo.SESSION _TIMEOUT, this.wh )
}
private void ZKOperations() throws IOException, InterruptedException, KeeperException
{
System.out .println ("/n1. 創建 ZooKeeper 節點 (znode : zoo2, 數據: myData2 ,權限: OPEN_ACL_UNSAFE ,節點類型: Persistent" )
zk.create ("/zoo2" , "myData2" .getBytes (), Ids.OPEN _ACL_UNSAFE, CreateMode.PERSISTENT )
System.out .println ("/n2. 查看是否創建成功: " )
System.out .println (new String(zk.getData ("/zoo2" , false, null)))
System.out .println ("/n3. 修改節點數據 " )
zk.setData ("/zoo2" , "shenlan211314" .getBytes (), -1 )
System.out .println ("/n4. 查看是否修改成功: " )
System.out .println (new String(zk.getData ("/zoo2" , false, null)))
System.out .println ("/n5. 刪除節點 " )
zk.delete ("/zoo2" , -1 )
System.out .println ("/n6. 查看節點是否被刪除: " )
System.out .println (" 節點狀態: [" + zk.exists ("/zoo2" , false) + "]" )
}
private void ZKClose() throws InterruptedException
{
zk.close ()
}
public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
SimpleDemo dm = new SimpleDemo()
dm.createZKInstance ()
dm.ZKOperations ()
dm.ZKClose ()
}
}
Zookeeper的監聽器工作機制
監聽器是一個接口,我們的代碼中可以實現Wather這個接口,實現其中的process方法,方法中即我們自己的業務邏輯
監聽器的註冊是在獲取數據的操作中實現:
getData(path,watch?)監聽的事件是:節點數據變化事件
getChildren(path,watch?)監聽的事件是:節點下的子節點增減變化事件