我对ZK并不熟悉,所以不确定这是否属实,但是在我的测试中,我发现了以下内容:
ZooKeeper zooKeeper1 = new ZooKeeper(
hosts, // ZooKeeper service hosts
5000, // Session timeout in milliseconds
// Anonymous Watcher Object
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,则不会触发事件。
发布于 2014-01-27 08:00:35
问题真的很简单,
当您使用EPHEMERAL_SEQUENTIAL
模式创建Znode
时,将添加创建的节点与序列号不同的节点,类似于使用名称/zoo/duck
创建时的/zoo/duck0000000027
。
但是另一方面,当您创建节点CreateMode.EPHEMERAL
时,则创建该节点的名称与指定的名称相同。
在EPHEMERAL_SEQUENTIAL
场景中,如果要添加watcher
,则在创建之后添加watcher
,然后添加节点,
String createdPath = zooKeeper1.create("/test13", null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
zooKeeper1.exists(createdPath, watcher);
https://stackoverflow.com/questions/21342118
复制相似问题