Apache zookeeper zookeeper管理员-不使用PathCacheListener接收子节点创建事件通知
我有一个worker类,它将znode注册为/workers/worker-1,我希望通过master从/assign/worker-1/task1接收此worker的分配。我已注册了一个主侦听器,并在分配路径(/assign/worker-1)上启动了PathChildrenCache,但由于某些原因,我没有收到有关worker的事件。下面是代码的样子Apache zookeeper zookeeper管理员-不使用PathCacheListener接收子节点创建事件通知,apache-zookeeper,apache-curator,Apache Zookeeper,Apache Curator,我有一个worker类,它将znode注册为/workers/worker-1,我希望通过master从/assign/worker-1/task1接收此worker的分配。我已注册了一个主侦听器,并在分配路径(/assign/worker-1)上启动了PathChildrenCache,但由于某些原因,我没有收到有关worker的事件。下面是代码的样子 public class Worker { @Autowired public Worker(CuratorFramework curato
public class Worker {
@Autowired
public Worker(CuratorFramework curatorFramework) {
client = curatorFramework;
//initialize assignments cache
assignments = new PathChildrenCache(client, Constants.ZK_ASSIGNMENTS_PATH + "/" + instanceId, false);
}
/**
* Starts the worker
* @throws Exception
*/
public void start() throws Exception{
log.debug("starting worker " + instanceId);
//create worker nodes
client.create()
.withMode(CreateMode.EPHEMERAL)
.inBackground()
.forPath(Constants.ZK_WORKERS_PATH + "/" + instanceId, new byte[0]);
//create worker assignment nodes
client.create()
.withMode(CreateMode.PERSISTENT)
.inBackground()
.forPath(Constants.ZK_ASSIGNMENTS_PATH + "/" + instanceId, new byte[0]);
//register listerner for assignments cache
assignments.getListenable().addListener(assignmentsListener);
assignments.start();
//main worker listener
client.getCuratorListenable().addListener(new CuratorListener(){
@Override
public void eventReceived(CuratorFramework client, CuratorEvent event) throws Exception {
log.debug("worker event => " + event);
}
});
}
/**
* Assignments cache listener
*/
PathChildrenCacheListener assignmentsListener = new PathChildrenCacheListener(){
@Override
public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {
switch(event.getType()){
case CHILD_ADDED:
log.debug("worker acknowleding assignment of " + event.getData().getPath());
break;
default:
log.debug("worker received event " + event);
}
}
};
}
因此,在此之后,如果我在/assign/worker-1下创建一个节点,我不会收到任何关于worker的通知。知道我做错了什么吗
谢谢别介意上面的代码是正确的。我遇到了一个问题,没有正确的实例id,因此它正在监视错误的路径