我是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);
那么即使在观察者对象下定义也不会触发
但是,如果这样做:
zooKeeper1.exists("/test13", watcher);
zooKeeper1.create("/test13", null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
那么甚至在监视者对象下定义也会被触发。
基本上,如果我将Sequntial用作CreateMode,则不会触发该事件。
问题确实非常简单,
当您使用EPHEMERAL_SEQUENTIAL
模式创建时,Znode
然后添加的创建的节点名称与序列号不同,就像/zoo/duck0000000027
我用name创建/zoo/duck
但另一方面在创建节点时CreateMode.EPHEMERAL
然后使用与指定名称相同的名称创建节点。
在EPHEMERAL_SEQUENTIAL
方案中,如果您要添加watcher
,则watcher
在创建后添加节点,例如
String createdPath = zooKeeper1.create("/test13", null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
zooKeeper1.exists(createdPath, watcher);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句