我有一个节点/ tasks,其中包含服务器需要执行的任务列表。我在那个节点上有一个观察者。添加任务后,观察者将调用zookeeper方法,该方法将获取所有子项,而回调将获取所有子项的列表(我需要处理)。看起来像这样:
Watcher newTaskWatcher = new Watcher(){
public void process(WatchedEvent e) {
if(e.getType() == EventType.NodeChildrenChanged) {
getTasks();
}
}
};
void getTasks(){
zk.getChildren("/tasks",
newTaskWatcher,
tasksGetChildrenCallback,
null);
}
ChildrenCallback tasksGetChildrenCallback = new ChildrenCallback() {
public void processResult(int rc, String path, Object ctx, List<String> children){
switch(Code.get(rc)) {
case CONNECTIONLOSS:
getTasks();
break;
case OK:
// loop on children list and process all the tasks
break;
default:
System.out.println("getChildren failed");
}
}
};
但是回调函数可以获取所有任务,我只需要添加的任务,这样我就不会两次处理任务。
执行此操作的最佳方法是什么。