接上篇,同样的代码,同样的地方debug。
zkCli.sh执行
[zk: localhost:2181(CONNECTED) 13] ls /t
[]
[zk: localhost:2181(CONNECTED) 14] create /t/1 "1"
Created /t/1
[zk: localhost:2181(CONNECTED) 15] create /t/2 "1"
Created /t/2
[zk: localhost:2181(CONNECTED) 16] create /t/3 "1"
Created /t/3
[zk: localhost:2181(CONNECTED) 17] create /t/4 "1"
Created /t/4
[zk: localhost:2181(CONNECTED) 18] delete /t/2
[zk: localhost:2181(CONNECTED) 19] delete /t/4
[zk: localhost:2181(CONNECTED) 20] ls /t
[3, 1]
放开debug,Console输出:
2016-04-14 16:28:58,553 INFO [PathChildrenCache-0] alarm.ZkTest (ZkTest.java:childEvent(65)) - zk:[path] ADD_WATCHER:/t/1
2016-04-14 16:28:58,940 INFO [PathChildrenCache-0] alarm.ZkTest (ZkTest.java:childEvent(65)) - zk:[path] ADD_WATCHER:/t/3
居然"/t/2"和"/t/4"相关信息控制台毫无输出,貌似因为如下Code:
private volatile Watcher childrenWatcher = new Watcher()
{
@Override
public void process(WatchedEvent event)
{
offerOperation(new RefreshOperation(PathChildrenCache.this, RefreshMode.STANDARD));
}
};
因为"/t/2"和"/t/4"创建后又删除了,事件触发刷新操作,刷新后又无变化造成这个原因。