Zookeeper实例原生API--同步获取节点数据

来源:互联网 发布:php开发实例大全怎么样 编辑:程序博客网 时间:2024/06/08 13:45


/** * * @ClassName: GetData_API_Sync_Usage * @Description: TODO(ZooKeeper API 获取节点数据内容,使用同步(sync)接口) * @author RongShu* @date 2017年6月11日 下午8:36:54 * */public class GetData_API_Sync_Usage implements Watcher {    private static CountDownLatch connectedSemaphore = new CountDownLatch(1);    private static ZooKeeper zk = null;    private static Stat stat = new Stat();    public static void main(String[] args) throws Exception {    String path = "/zk-book";    zk = new ZooKeeper("localhost:2181",5000,new GetData_API_Sync_Usage());        connectedSemaphore.await();        zk.create( path, "123".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL );        System.out.println(new String(zk.getData( path, true, stat )));        System.out.println(stat.getCzxid()+","+stat.getMzxid()+","+stat.getVersion());        zk.setData( path, "123".getBytes(), -1 );        Thread.sleep( Integer.MAX_VALUE );    }    public void process(WatchedEvent event) {        if (KeeperState.SyncConnected == event.getState()) {        if (EventType.None == event.getType() && null == event.getPath()) {            connectedSemaphore.countDown();        } else if (event.getType() == EventType.NodeDataChanged) {            try {                System.out.println(new String(zk.getData( event.getPath(), true, stat )));                System.out.println(stat.getCzxid()+","+stat.getMzxid()+","+stat.getVersion());            } catch (Exception e) {}        }      }       }}输出123373,373,0123373,374,1

注意:

客户端在获取一个节点数据内容的时候是可以进行watcher注册的,这样一来,一旦该节点的状态发生变更,那么Zookeeper服务端就会向客户端发送一个NodeDataChanged()事件通知。

API返回结果的类型是byte[],目前Zookeeper只支持这种类型的数据存储,所以在获取数据的时候也是返回此类型。

这里明确一个概念:节点的数据内容或是节点的数据版本变化,都被看作是Zookeeper节点的变化。


扩展



参考

1.《从Paxos到Zookeeper:分布式一致性原理与实践》

2. https://zookeeper.apache.org/doc/r3.5.3-beta/api/index.html

阅读全文
0 0
原创粉丝点击