ZooKeeper的Apache Curator 库使用了很好的“流利”语法。例如,要修改事务中的多个节点,代码如下所示:
client.inTransaction().
.setData().forNode(node1Path, data1)
.and()
.SetData().forNode(node2Path, data2)
.and()
.commit();
这很好用,而且恕我直言,生成非常易读的代码。但是,我有一种情况,我必须在事务中修改一组 ZNode。直到运行时我才知道需要修改多少节点或哪些节点。因此,我认为我不能轻松地使用流利的语法。查看文档,我可以手动管理每个 fluent 方法调用返回的代理对象,但是代码需要显式使用CuratorTransaction
, TransactionSetDataBuilder
,CuratorTransactionBridge
等。这显然是可行的,但代码开始看起来很丑陋。
我没有看到与 Curator 进行交易的非流畅方式。有谁知道是否有一个和/或是否有一种“好”的方式在运行时构建事务?具体来说,给定Map<String, String>
从 ZNode 路径到需要在该 ZNode 中结束的数据的映射,您将如何以事务方式设置所有节点?