创建路径时,我在以下代码中遇到NodeExists错误。
CuratorTransaction transaction = curatorFramework.inTransaction();
transaction.create().forPath("/foo")
.and().create().forPath("/foo/123")
.and().create().forPath("/foo")
.and().commit();因此,在这里,它试图在第一次创建foo之后再次创建foo。有没有什么方法可以在创建路径时检查事务的状态,以便在事务/foo中创建存在,然后它就不会再次创建。
发布于 2016-03-09 19:01:08
简短的回答是否定的,不可能检查你是否试图创建两次路径。原因是您将整个“blob”作为一个事务提交给zookeeper,这在广义上意味着每个操作都将同时完成。
至少有两种不同的方法来解决这个问题,要么将每个操作作为单独的操作发送,在这种情况下,您可以这样做:
if(curatorFramework.checkExists().forPath("/foo") == null){
curatorFramework.create().forPath("/foo");
}或者,如果使用事务对您的应用程序很重要,则应用程序必须控制不在一个事务中放置两个冲突的操作。例如通过使用在路径上索引的HashMap。
另外,CuratorTransaction已被弃用,因此您应该使用CuratorFramework.transaction()。
https://stackoverflow.com/questions/35866775
复制相似问题