ZooKeeper有一个绑定Java和C的官方API。Zookeeper社区为大大都语言(.NET,python等)供给非官方API。使用ZooKeeper API,应用措施可以连接,交互,操纵数据,协调,最后断开与ZooKeeper调集的连接。
ZooKeeper API具有丰富的成果,以简单和安适的方法获得ZooKeeper调集的所有成果。ZooKeeper API供给同步和异步要领。
ZooKeeper调集和ZooKeeper API在各个方面都完全相辅相成,对开发人员有很大的辅佐。让我们在本章讨论Java绑定。
ZooKeeper API的根本常识与ZooKeeper调集进行交互的应用措施称为 ZooKeeper客户端或简称客户端。
Znode是ZooKeeper调集的核心组件,ZooKeeper API供给了一小组要领使用ZooKeeper调集来独霸znode的所有细节。
客户端应该遵循以法式,与ZooKeeper调集进行清晰和洁净的交互。
连接到ZooKeeper调集。ZooKeeper调集为客户端分配会话ID。
按期向处事器发送心跳。否则,ZooKeeper调集将过期会话ID,客户端需要从头连接。
只要会话ID处于勾当状态,就可以获取/设置znode。
所有任务完成后,断开与ZooKeeper调集的连接。如果客户端永劫间不勾当,则ZooKeeper调集将自动断开客户端。
Java绑定让我们来了解本章中最重要的一组ZooKeeper API。ZooKeeper API的核心部分是ZooKeeper类。它供给了在其结构函数中连接ZooKeeper调集的选项,并具有以下要领:
connect - 连接到ZooKeeper调集
create- 创建znode
exists- 查抄znode是否存在及其信息
getData - 从特定的znode获取数据
setData - 在特定的znode中设置数据
getChildren - 获取特定znode中的所有子节点
delete - 删除特定的znode及其所有子项
close - *连接
连接到ZooKeeper调集ZooKeeper类通过其结构函数供给connect成果。结构函数的签名如下 :
ZooKeeper(String connectionString, int sessionTimeout, Watcher watcher)
connectionString - ZooKeeper调集主机。
sessionTimeout - 会话超时(以毫秒为单位)。
watcher - 实现“监视器”界面的东西。ZooKeeper调集通过监视器东西返回连接状态。
让我们创建一个新的辅佐类 ZooKeeperConnection ,并添加一个要领 connect 。 connect 要领创建一个ZooKeeper东西,连接到ZooKeeper调集,然后返回东西。
这里 CountDownLatch 用于遏制(期待)主进程,直到客户端与ZooKeeper调集连接。
ZooKeeper调集通过监视器回调来答复连接状态。一旦客户端与ZooKeeper调集连接,监视器回调就会被挪用,并且监视器回调函数挪用CountDownLatch的countDown要领来释放锁,在主进程中await。
以下是与ZooKeeper调集连接的完整代码。
编码:ZooKeeperConnection.java// import java classes import java.io.IOException; import java.util.concurrent.CountDownLatch; // import zookeeper classes import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.Watcher.Event.KeeperState; import org.apache.zookeeper.ZooKeeper; import org.apache.zookeeper.AsyncCallback.StatCallback; import org.apache.zookeeper.KeeperException.Code; import org.apache.zookeeper.data.Stat; public class ZooKeeperConnection { // declare zookeeper instance to access ZooKeeper ensemble private ZooKeeper zoo; final CountDownLatch connectedSignal = new CountDownLatch(1); // Method to connect zookeeper ensemble. public ZooKeeper connect(String host) throws IOException,InterruptedException { zoo = new ZooKeeper(host,5000,new Watcher() { public void process(WatchedEvent we) { if (we.getState() == KeeperState.SyncConnected) { connectedSignal.countDown(); } } }); connectedSignal.await(); return zoo; } // Method to disconnect from zookeeper server public void close() throws InterruptedException { zoo.close(); } }
生存上面的代码,它将不才一节顶用于连接ZooKeeper调集。
创建ZnodeZooKeeper类供给了在ZooKeeper调集中创建一个新的znode的create要领。 create 要领的签名如下:
create(String path, byte[] data, List<ACL> acl, CreateMode createMode)
path - Znode路径。例如,/myapp1,/myapp2,/myapp1/mydata1,myapp2/mydata1/myanothersubdata
data - 要存储在指定znode路径中的数据