虽然现在TreeCache已经是处于deprecated的阶段,但是对于旧版本的zookeeper集群,依然需要TreeCache做监听器来完成。这里基于Sprig-Boot来给展示一个比较典型的TreeCache用法。
package com.juejin.util;
import lombok.SneakyThrows;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.cache.TreeCache;
import org.apache.curator.framework.recipes.cache.TreeCacheEvent;
import org.apache.curator.framework.recipes.cache.TreeCacheListener;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.junit.Test;
import java.util.concurrent.TimeUnit;
/**
* @program:
* @description:
* @author:
* @create: 2020-12-02 15:31
**/
public class TestWatcher {
@Test
@SneakyThrows
public void test() {
CuratorFrameworkFactory.Builder builder = CuratorFrameworkFactory.builder()
.connectString("localhost:2181")
.namespace("sigward_test")
.retryPolicy(new ExponentialBackoffRetry(1000, 3));
CuratorFramework client = builder.build();
client.start();
client.blockUntilConnected();
System.out.println("connected");
TreeCache watcher = new TreeCache(client, "/");
watcher.getListenable().addListener(new TreeCacheListener() {
@Override
public void childEvent(CuratorFramework client, TreeCacheEvent event) throws Exception {
System.out.println(event);
}
});
watcher.start();
System.out.println("watched");
TimeUnit.SECONDS.sleep(5);
System.out.println(watcher.getCurrentChildren("/"));
System.out.println(watcher.getCurrentChildren("/").keySet());
while (true) {
System.out.println(new String(watcher.getCurrentData("/").getData()));
// 这时间里可以set一下kafka node,看看有没有同步过来
TimeUnit.SECONDS.sleep(5);
}
}
}