我正在使用我的 ZooKeeperNetEx
nuget 包执行一个简单的 createAsync()
操作,它抛出由 MARSHALLINGERROR
触发的异常。
这是两行摘要(在这两行之间,已成功确认到 Zookeeper 的连接):
var Zoo = new ZooKeeper("localhost:50002", 5000, new ClusterWatcher());
. . .
var parentNode = Zoo.createAsync("/election", null, null, CreateMode.PERSISTENT).Result
我不明白。当然,ClusterWatcher
是我自己的从 Watcher
派生的类。是的,我是用 C# 写的,但这只是一件简单的事情,我认为这并不重要。如果重要的话,主机正在运行 Windows 10 Pro。
最佳答案
未指定 ACL 模式(您似乎传递了 null
)可能会触发此异常。在 Java 中,您可以传递 ACL 模式的预定义列表 ZooDefs.Ids.OPEN_ACL_UNSAFE
(例如,或该类中的其他列表之一);对于 C# 可能会有一个类似命名的常量。
在 Java 客户端库中,这是一个方便的常量,定义为:
/**
* This is a completely open ACL .
*/
public final ArrayList<ACL> OPEN_ACL_UNSAFE = new ArrayList<ACL>(
Collections.singletonList(new ACL(Perms.ALL, ANYONE_ID_UNSAFE))
);
关于apache-zookeeper - 创建 znode 时导致 MARSHALLINGERROR 的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43668985/