码迷,mamicode.com
首页 > 其他好文 > 详细

curator 简洁监听例子

时间:2016-01-18 17:31:14      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

ZooKeeper(3.4.5) 使用Curator监听事件

 

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() {
        @Override
        public 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() {
        @Override
        public 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();
  }
}

curator 简洁监听例子

标签:

原文地址:http://www.cnblogs.com/kuipertan/p/5139734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!