java - CuratorTransaction KeeperErrorCode = NoNode

标签 java apache-zookeeper apache-curator

我正在尝试使用 Java 中的 Apache Curator 库中的事务将数据写入 ZooKeeper。

这是我的代码:

private CuratorFramework client;
...
private void writeToZK() {
    String nodePath = "/path/to/node";
    client.inTransaction().create().forPath(nodePath).and().commit(); // problem
}

(我使用的是 curator v2.9.0)

抛出:

org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:111)
    at org.apache.zookeeper.ZooKeeper.multiInternal(ZooKeeper.java:949)
    at org.apache.zookeeper.ZooKeeper.multi(ZooKeeper.java:915)

我深入研究了 ZooKeeper.multiInternal(),它得到了包含 zookeeper 的响应

OpResult: err = -101, type = -1.

如果我用这个替换“//problem”行,它会起作用:

client.create().creatingParentsIfNeeded().forPath(nodePath); // runs with no problem

有什么想法吗?

最佳答案

在 zookeeper 中,每个节点都定义了一个路径。请查看文档:https://zookeeper.apache.org/doc/trunk/zookeeperOver.html 它们的组织方式类似于标准文件系统。这意味着如果“/path/to”不存在,则不能创建 >“/path/to/node”。 您提出的解决方案是正确的,因为如果您的节点的父节点不存在,它将由 zookeeper 自动创建。

关于java - CuratorTransaction KeeperErrorCode = NoNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41385301/

相关文章:

java - 尝试使用 ArrayList<Integer> 创建冒泡排序时出现问题

java - Action 监听器打开新窗口并显示结果

java - 在 Java Zookeeper api 中禁用日志消息

java - Curator 与 Zookeeper 服务发现连接被强制关闭

java - 如果我在每个 ZooKeeper 集群中使用多个 Curator 框架实例,我会得到什么结果?

apache-zookeeper - 重新连接后 Apache Curator 丢失所有监视

Java:如何将 JFrame 带到前端?

java - 具有多种配置的简单 UI 应用程序的最佳框架

dns - 如果 DNS 出现故障,Zookeeper 会发生什么情况?

java - Netflix Curator 交易错误