Java Netflix策展人事务错误

Java Netflix策展人事务错误,java,transactions,apache-zookeeper,apache-curator,Java,Transactions,Apache Zookeeper,Apache Curator,在创建路径时,我在下面的代码中发现NodeExists错误 CuratorTransaction transaction = curatorFramework.inTransaction(); transaction.create().forPath("/foo") .and().create().forPath("/foo/123") .and().create().forPath("/foo") .and().commit(); 所以,在本文

在创建路径时,我在下面的代码中发现NodeExists错误

CuratorTransaction transaction = curatorFramework.inTransaction();
transaction.create().forPath("/foo")
        .and().create().forPath("/foo/123")
        .and().create().forPath("/foo")
        .and().commit();
所以,在本文中,它试图在第一次创建foo之后再次创建foo。
在创建路径时,是否有任何方法可以检查事务的状态,以便在事务/foo create中存在,然后它将不会再次创建。

简短的回答是否,无法检查您是否尝试创建两次路径。原因是您将整个“blob”作为一个事务提交给zookeeper,这在广义上意味着每个操作都将同时完成

至少有两种不同的方法可以解决此问题,您可以将每个操作作为单独的操作发送,在这种情况下,您可以执行以下操作:

if(curatorFramework.checkExists().forPath("/foo") == null){
  curatorFramework.create().forPath("/foo");
}
或者,如果应用程序使用事务对您的应用程序很重要,那么您的应用程序必须控制它不会在一个事务中放置两个冲突的操作。例如,使用在路径上建立索引的哈希映射

另一方面,CuratorTransaction已被弃用,因此您应该使用