Curator之更新数据。

        在Curator中,可以通过以下API来更新指定节点的数据。

Curator更新数据API

  • CuratorFramework
    • public SetDataBuilder setData();
  • Versionable<T>
    • public T withVersion(int version);
  • PathANdBytesable<T>
    • public T forPath(String path,byte[] data) throws Exception;
    • public T forPath(String path) throws Exception;

        以上就是一系列最常用的更新数据API,下面通过一些具体场景来说明如何使用这些API。

更新一个节点的数据内容

client.setData().forPath(path);

调用该接口后,会返回一个stat对象。

更新一个节点的数据内容,强制指定版本进行更新

client.setData().withVersion(version).forPath(path);

注意,withVersion接口就是用来实现CAS(Compare and Swap)的,version(版本信息)通常是从一个旧的stat对象中获取到的。

        下面通过一个实际例子来看看如何在代码中使用这些API。

// 使用Curator更新数据内容

public class Set_Data_Sample {

static String path = "/zk-book";

static CuratorFramework client = CuratorFrameworkFactory.builder().connectString("domain1.book.zookeeper:2181").sessionTimeoutMs(5000).retryPolicy(new ExponentialBackoffRetry(1000, 3)).build();

public static void main(String[] args) throws Exception {

client.start();

client.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath(path, "init".getBytes());

Stat stat = new Stat();

client.getData().storingStatIn(stat).forPath(path);

System.out.println("Success set node for : " + path + ", new version: " + client.setData().withVersion(stat.getVersion()).forPath(path).getVersion());

try {

client.setData().withVersion(stat.getVersion()).forPath(path);

} catch (Exception e) {

System.out.println("Fail set node due to " + e.getMessage());

}

}

}

        运行程序,输出结果如下:

       

        上面的示例程序演示了如何使用Curator的API来进行ZooKeeper数据节点的内容更新。该程序前后进行了两次更新操作,第一次使用最新的stat变量进行更新操作,更新成功;第二次使用了过期的stat变量进行更新操作,抛出异常:KeeperErrorCode = BadVersion。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值