当创建模式为Sequential时,ZooKeeper中的Watcher不会触发事件

时间:2014-01-24 20:41:46

标签: apache-zookeeper

我是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,则不会触发事件。

1 个答案:

答案 0 :(得分:1)

问题非常简单,
当您使用EPHEMERAL_SEQUENTIAL模式创建Znode时,创建的节点与添加序列号的名称不同,当我创建名称为{/zoo/duck0000000027时1}}
但另一方面,当您创建节点/zoo/duck时,将创建与指定名称相同的节点。

CreateMode.EPHEMERAL方案中,如果您要添加EPHEMERAL_SEQUENTIAL,请在创建节点之后添加watcher,例如

watcher