我是ZK的新手,所以不确定这是否属实,但在我的测试中我找到了以下内容:
ZooKeeper zooKeeper1 = new ZooKeeper(
hosts, // ZooKeeper service hosts
5000, // Session timeout in milliseconds
// Anonymous Watcher Object
watcher);
其中watcher是Watcher实例。
现在,如果我这样做:
zooKeeper1.exists("/test13", watcher);
zooKeeper1.create("/test13", null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
然后甚至在watcher对象下定义不被触发
但如果这样做:
zooKeeper1.exists("/test13", watcher);
zooKeeper1.create("/test13", null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
然后甚至在watcher对象下定义被触发。
基本上,如果我使用Sequntial作为CreateMode,则不会触发事件。
答案 0 :(得分:1)
问题非常简单,
当您使用EPHEMERAL_SEQUENTIAL
模式创建Znode
时,创建的节点与添加序列号的名称不同,当我创建名称为{/zoo/duck0000000027
时1}}
但另一方面,当您创建节点/zoo/duck
时,将创建与指定名称相同的节点。
在CreateMode.EPHEMERAL
方案中,如果您要添加EPHEMERAL_SEQUENTIAL
,请在创建节点之后添加watcher
,例如
watcher