gpt4 book ai didi

java - Curator 交易运行时构建

转载 作者:行者123 更新时间:2023-11-29 03:31:12 25 4
gpt4 key购买 nike

Apache Curator library for ZooKeeper 使用了一个很好的“流畅”语法。例如,要修改事务中的多个节点,代码如下所示:

client.inTransaction().
.setData().forNode(node1Path, data1)
.and()
.SetData().forNode(node2Path, data2)
.and()
.commit();

这很好用,恕我直言,生成的代码非常易读。但是,我有一种情况,我必须在事务中修改一组 ZNode。直到运行时我才知道需要修改多少节点或哪些节点。因此,我认为我不能轻易使用流畅的语法。查看文档,我可以手动管理每个流畅的方法调用返回的代理对象,但是代码需要显式使用 CuratorTransaction , TransactionSetDataBuilder , CuratorTransactionBridge等。这显然是可行的,但代码开始看起来真的很难看。

我没有看到与 Curator 进行交易的不流畅方式。有谁知道是否有一个和/或是否有一种在运行时构建事务的“好”方法?具体来说,给定一个 Map<String, String>从 ZNode 路径映射到需要在该 ZNode 中结束的数据,您将如何以事务方式设置所有节点?

最佳答案

给猫剥皮的一种方法?

CuratorTransaction curatorTransaction = client.inTransaction();

for (Map.Entry<String, String> entry : transactionInfo.entrySet()) {
curatorTransaction = curatorTransaction
.setData().forNode(entry.getKey(), entry.getValue()).and();
}

// If there was at least one entry in transactionInfo, and() makes it a CuratorTransactionFinal
if (curatorTransaction instanceof CuratorTransactionFinal) {
((CuratorTransactionFinal)curatorTransaction).commit();
}

关于java - Curator 交易运行时构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18197720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com