我正在做一个项目,我需要在一个节点上维护一个 watch ,以及该节点的子节点。我尝试过使用 PathCache,但我不确定如何在这里观看 child 的 child ?

我的根节点是 - "/my/test",我正在使用以下代码监视该节点。我想要做的是,在 "/my/test" znode 上保持监视。所以假设这些节点是否被添加到我的根节点 -

"/my/test/test1" 
"/my/test/test2" 
"/my/test/test3" 

然后我应该得到通知(直到这部分我能够让它工作)但是如果任何新节点被添加、更新或删除到 "/my/test/test1""/my/test/test2""/my/test/test3" 然后我也应该得到通知,这是我无法理解如何制作的部分工作。

每当我向 "/my/test" 添加任何新节点时,例如 "/my/test/test1""/my/test/test2", "/my/test/test3" 然后使用以下代码触发 watch 。但是,如果我向 "/my/test/test1""/my/test/test2" 添加任何新节点,则不会触发任何 watch ,我也不会确定如何为此添加代码吗?任何想法如何做到这一点?

可能是如果过去有人这样做过..所以任何例子都会对我有很大帮助..

下面是我的代码,它适用于 "/my/test" 的 child ,但不适用于 "/my/test/test1" 的 child 等等。

private static final String PATH = "/my/test"; 
 
public static void main(String[] args) { 
    CuratorFramework client = null; 
    PathChildrenCache cache = null; 
    try { 
        client = CuratorClient.createSimple("localhost:2181"); 
        client.start(); 
 
        // in this example we will cache data. Notice that this is optional. 
        cache = new PathChildrenCache(client, PATH, true); 
        cache.start(); 
 
        addListener(cache); 
 
        for(;;) { 
            try { 
                Thread.sleep(50000); 
            } catch(InterruptedException e) { 
            } 
        } 
    } catch (Exception e1) { 
        e1.printStackTrace(); 
    } 
} 

下面是我的 addListener 方法 -

private static void addListener(PathChildrenCache cache) { 
 
    PathChildrenCacheListener listener = new PathChildrenCacheListener() { 
        public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception { 
            switch (event.getType()) { 
            case CHILD_ADDED: { 
                System.out.println("Node added: " + ZKPaths.getNodeFromPath(event.getData().getPath())); 
                break; 
            } 
 
            case CHILD_UPDATED: { 
                System.out.println("Node changed: "    + ZKPaths.getNodeFromPath(event.getData().getPath())); 
                break; 
            } 
 
            case CHILD_REMOVED: { 
                System.out.println("Node removed: "    + ZKPaths.getNodeFromPath(event.getData().getPath())); 
                break; 
            } 
            default: 
                break; 
            } 
        } 
    }; 
    cache.getListenable().addListener(listener); 
} 

任何人都可以为我的用例提供一个简单的例子吗?我正在使用最近发布的 Curator 2.4.0。

请您参考如下方法:

改用 TreeCache。它可以完成 PathCache 所做的一切,还可以处理子节点。


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!