Zookeeper实例Curator API-NodeCache使用实例
import org.apache.curator.framework.CuratorFramework;import org.apache.curator.framework.CuratorFrameworkFactory;import org.apache.curator.framework.recipes.cache.NodeCache;import org.apache.curato
·
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.cache.NodeCache;
import org.apache.curator.framework.recipes.cache.NodeCacheListener;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.zookeeper.CreateMode;
/**
*
* @ClassName: NodeCache_Sample
* @Description: TODO(节点监听)
* @author RongShu
* @date 2017年6月17日 下午1:23:18
*
*/
public class NodeCache_Sample {
static String path = "/zk-book/nodecache";
static CuratorFramework client = CuratorFrameworkFactory.builder().connectString("localhost:2181")
.sessionTimeoutMs(5000).retryPolicy(new ExponentialBackoffRetry(1000, 3)).build();
public static void main(String[] args) throws Exception {
client.start();
client.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath(path, "init".getBytes());
final NodeCache cache = new NodeCache(client, path, false);
cache.start(true);
cache.getListenable().addListener(new NodeCacheListener() {
public void nodeChanged() throws Exception {
System.out.println("Node data update, new data: " + new String(cache.getCurrentData().getData()));
}
});
client.setData().forPath(path, "u".getBytes());
Thread.sleep(1000);
client.delete().deletingChildrenIfNeeded().forPath(path);
Thread.sleep(Integer.MAX_VALUE);
}
}
输出
Node data update, new data: u
注意:
NodeCache的start方法传递一个boolean类型参数,默认false,如果设置为true,那么NodeCache在第一次启动打的时候就会立刻在Zookeeper上读取对应节点的数据内容,并保存在Cache中。
NodeCache不仅可以用于监听数据节点内容变更,也能监听指定节点是否存在。如果原本节点不存在,那么cache就会在节点创建后触发NodeCacheListener,但是如果该节点被删除,那么Curator就无法触发NodeCacheListener了。
扩展:
参考
1.《从Paxos到Zookeeper:分布式一致性原理与实践》
2.https://zookeeper.apache.org/doc/r3.5.3-beta/javaExample.html
更多推荐
已为社区贡献3条内容
所有评论(0)