У меня есть узел / задачи со списком задач, которые должен выполнить сервер.И у меня есть наблюдатель на этом узле.Когда задача добавлена, наблюдатель вызывает метод 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");
}
}
};
Но обратный вызов получает все задачи, и я хочу только те, которые были добавлены, поэтому я не буду обрабатывать задачу дважды.
Каков наилучший способсделать это.