本文主要是介绍ZooKeeper(3.4.5) 使用Curator监听事件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ZooKeeper(3.4.5) 使用Curator监听事件
ZooKeeper原生的API支持通过注册Watcher来进行事件监听,但是Watcher通知是一次性的,因此开发过程中需要反复注册Watcher,比较繁琐。Curator引入了Cache来监听ZooKeeper服务端的事件。Cache对ZooKeeper事件监听进行了封装,能够自动处理反复注册监听,简化了ZooKeeper原生API繁琐的开发过程。
简单的示例:
package com.huey.dream.demo;import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;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.framework.recipes.cache.PathChildrenCache; import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent; import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener; import org.apache.curator.framework.recipes.cache.PathChildrenCache.StartMode; import org.apache.curator.retry.ExponentialBackoffRetry;/*** Curator事件监听* @author huey* @version 1.0 * @created 2015-3-2*/ public class CarutorDemo {public static void main(String[] args) throws Exception {CuratorFramework client = CuratorFrameworkFactory.builder().connectString("192.168.1.109:2181").sessionTimeoutMs(5000).connectionTimeoutMs(3000).retryPolicy(new ExponentialBackoffRetry(1000, 3)).build();client.start();client.create().creatingParentsIfNeeded().forPath("/zk-huey/cnode", "hello".getBytes());/*** 在注册监听器的时候,如果传入此参数,当事件触发时,逻辑由线程池处理*/ExecutorService pool = Executors.newFixedThreadPool(2);/*** 监听数据节点的变化情况*/final NodeCache nodeCache = new NodeCache(client, "/zk-huey/cnode", false);nodeCache.start(true);nodeCache.getListenable().addListener(new NodeCacheListener() {@Overridepublic void nodeChanged() throws Exception {System.out.println("Node data is changed, new data: " + new String(nodeCache.getCurrentData().getData()));}}, pool);/*** 监听子节点的变化情况*/final PathChildrenCache childrenCache = new PathChildrenCache(client, "/zk-huey", true);childrenCache.start(StartMode.POST_INITIALIZED_EVENT);childrenCache.getListenable().addListener(new PathChildrenCacheListener() {@Overridepublic void childEvent(CuratorFramework client, PathChildrenCacheEvent event)throws Exception {switch (event.getType()) {case CHILD_ADDED:System.out.println("CHILD_ADDED: " + event.getData().getPath());break;case CHILD_REMOVED:System.out.println("CHILD_REMOVED: " + event.getData().getPath());break;case CHILD_UPDATED:System.out.println("CHILD_UPDATED: " + event.getData().getPath());break;default:break;}}},pool);client.setData().forPath("/zk-huey/cnode", "world".getBytes());Thread.sleep(10 * 1000);pool.shutdown();client.close();} }
这篇关于ZooKeeper(3.4.5) 使用Curator监听事件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!