9

ノードの監視を維持する必要があるプロジェクトに取り組んでおり、そのノードの子も同様です。PathCache を使用してみましたが、ここで子の子を監視する方法がわかりませんか?

ここに私のルート ノードが"/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""/my/test/test1""/my/test/test2"

誰かが過去にこれをやったことがあるかもしれません..だからどんな例でも私にとって大きな助けになるでしょう..

以下は、子供に対しては正常に機能しますが、など"/my/test"の子供に対しては機能しない私のコードです。"/my/test/test1"

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 を使用しています。

4

2 に答える 2

7

代わりに TreeCache を使用してください。PathCache が行うすべての処理に加えて、子ノードを処理できます。

于 2015-05-28T09:01:59.917 に答える