创建路径时,我在以下代码中收到 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");
}
或者,如果应用程序使用事务对于您的应用程序很重要,那么您的应用程序必须控制它不会将两个冲突的操作放入一个事务中。例如,使用在路径上建立索引的 HashMap。
顺便说一句,CuratorTransaction 已被弃用,因此您应该使用 CuratorFramework.transaction()相反。
关于java - Netflix Curator 交易错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35866775/