Zookeeper获得更改的节点(并非全部)

时间:2018-12-09 11:57:24

标签: java locking apache-zookeeper distributed-computing

我有一个节点/ 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");
        }
    }
};

但是回调函数可以获取所有任务,我只需要添加的任务,这样我就不会两次处理任务。

执行此操作的最佳方法是什么。

0 个答案:

没有答案