当我在带有策展人的Zookeeper节点上调用getChildren()时,有没有办法忽略代表锁定的子节点?
我想用一个特定节点的数据读取所有孩子。因此,我首先调用getChildren()并迭代返回的List并在每个这样的子节点上调用getData()。为了避免孩子们在两者之间发生变化,我首先需要一个InterProcessMutex。不幸的是,孩子列表中也包含这个互斥锁。
InterProcessMutex mutex = new InterProcessMutex(client, parentNodePath);
mutex.acquire();
try {
List<String> children = client.getChildren().forPath(parentNodePath);
for (String child : children) {
// do something
// ignore the lock-node
}
} finally {
mutex.release();
}
有更聪明的方法吗?或者只是忽略锁节点?
答案 0 :(得分:0)
为锁定节点使用不同的基础,这样实际数据就不会与锁定数据混合。锁不必知道它们锁定的内容,因此不需要为同一父基提供锁机制。
InterProcessMutex mutex = new InterProcessMutex(client, "/lock-base/lock-");
然后以与你相同的方式完成剩下的工作
mutex.acquire();
try {
List<String> children = client.getChildren().forPath(parentNodePath);
for (String child : children) {
// do something
// no need to worry about lock nodes
}
} finally {
mutex.release();
}
请确保为尝试访问parentNodePath的所有应用程序使用相同的锁定节点库,并且您很好。