Zookeeper实例原生API--同步更新节点数据
来源:互联网 发布:江西网络干部学院下载 编辑:程序博客网 时间:2024/06/14 00:11
import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.KeeperException;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.Watcher.Event.EventType;import org.apache.zookeeper.Watcher.Event.KeeperState;import org.apache.zookeeper.ZooDefs.Ids;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.data.Stat;/** * * @ClassName: SetData_API_Sync_Usage * @Description: TODO(ZooKeeper API 更新节点数据内容,使用同步(sync)接口) * @author RongShu* @date 2017年6月11日 下午8:39:56 * */public class SetData_API_Sync_Usage implements Watcher { private static CountDownLatch connectedSemaphore = new CountDownLatch(1); private static ZooKeeper zk; public static void main(String[] args) throws Exception { String path = "/zk-book"; zk = new ZooKeeper("localhost:2181", 5000, new SetData_API_Sync_Usage()); connectedSemaphore.await(); zk.create( path, "123".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL ); zk.getData( path, true, null ); Stat stat = zk.setData( path, "456".getBytes(), -1 ); System.out.println(stat.getCzxid()+","+stat.getMzxid()+","+stat.getVersion()); Stat stat2 = zk.setData( path, "456".getBytes(), stat.getVersion() ); System.out.println(stat2.getCzxid()+","+stat2.getMzxid()+","+stat2.getVersion()); try {zk.setData( path, "456".getBytes(), stat.getVersion() );} catch ( KeeperException e ) {System.out.println("Error: " + e.code() + "," + e.getMessage());} Thread.sleep( Integer.MAX_VALUE ); } @Override public void process(WatchedEvent event) { if (KeeperState.SyncConnected == event.getState()) { if (EventType.None == event.getType() && null == event.getPath()) { connectedSemaphore.countDown(); } } }}输出394,395,1394,396,2Error: BADVERSION,KeeperErrorCode = BadVersion for /zk-book
注意:
Zookeeper的setData接口中version参数是由CAS原理衍生而来,Zookeeper每个节点都有数据版本概念,在调用更新操作的时候,就可以添加version这个参数,该参数可以对应于CAS原理中的 “预期值” 表明是针对这个版本进行的更新。
Zookeeper中数据版本都是从0开始计数的,如果客户端传入的参数为-1,就是告诉Zookeeper服务端,客户端需要基于数据的最新版本进行操作。
扩展
参考
1.《从Paxos到Zookeeper:分布式一致性原理与实践》
2. https://zookeeper.apache.org/doc/r3.5.3-beta/api/index.html
阅读全文
0 0
- Zookeeper实例原生API--同步更新节点数据
- Zookeeper实例原生API--同步获取节点数据
- Zookeeper实例原生API--异步更新节点数据
- Zookeeper实例原生API--同步创建节点
- Zookeeper实例原生API--同步获取子节点列表
- Zookeeper实例原生API--异步获取节点数据
- Zookeeper实例原生API--异步创建节点
- Zookeeper实例原生API--删除节点
- Zookeeper实例ZkClient API-更新节点内容
- Zookeeper实例原生API--使用错误权限信息的ZooKeeper会话访问含权限信息的数据节点
- Zookeeper实例原生API--异步获取子节点列表
- Zookeeper实例原生API--检查节点是否存在
- Zookeeper实例原生API--删除节点接口权限
- Zookeeper实例原生API--无权限信息的Zookeeper会话访问有权限信息的节点
- Zookeeper实例ZkClient API-获取节点数据内容
- Zookeeper实例Curator API-使用Curator更新数据内容
- Zookeeper实例原生API--创建一个基本的Zookeeper会话
- Zookeeper实例ZkClient API-创建节点
- OC代理,delegate
- windows下解压版mysql-5.7的安装方式
- Java基本数据类型的默认值
- [bzoj1143][CTSC2008]祭祀river 最大独立集+floyd
- 网络流二元关系
- Zookeeper实例原生API--同步更新节点数据
- 开发人员学Linux(6):CentOS7编译安装MySQL5.17.8多实例及主从复制
- 如何教孩子Scheme编程(2)
- 数据结构—栈的实现及实战应用
- 【JVM】jvm内存模型及分区
- [LeetCode]168. Excel Sheet Column Title
- 阿里云机器学习平台——PAI平台
- java语言基础(64)——集合框架(集合的由来以及数组集合的区别 集合的遍历)
- RestFul风格的接口的使用