zoukankan      html  css  js  c++  java
  • Zookeeper:Curator Watcher机制和事务控制

    Curator提供两种Watcher来监听节点的变化。

    后文中的ct:

    CuratorFramework ct;
        @Before
        public void before(){
            ct = CuratorFrameworkFactory.builder()
                    //ip:端口
                    .connectString("192.168.10.132:2181,192.168.10.133:2181,192.168.10.135:2181")
                    //超时时间
                    .sessionTimeoutMs(5000)
                    //连接断开5秒后,会进行一次重连
                    .retryPolicy(new RetryOneTime(5000))
                    //命名空间,该命名空间作为父节点
                    .namespace("ct").build();
            //打开连接
            ct.start();
        }
        @After
        public void after(){
            ct.close();
        } 

    1.Node Cache

    只是监听某一个特定的节点,监听节点的新增和修改

            //监视某个节点的数据变化
            final NodeCache nodeCache = new NodeCache(ct, "/node1");
            nodeCache.start();
            nodeCache.getListenable().addListener(new NodeCacheListener() {
                //节点变化时的回调方法
                public void nodeChanged() throws Exception {
                    System.out.println(nodeCache.getCurrentData().getPath());
                    System.out.println(new String(nodeCache.getCurrentData().getData()));
                }
            });
            Thread.sleep(100000);
            nodeCache.close();

    2.PathChildren Cache

    监控一个ZNode的子节点,当一个子节点增加更新删除时。Path Cache会改变它的状态,会包含最新的子节点、数据和状态。

            //第三个参数:事件中是否可以获取节点的数据
            PathChildrenCache cache = new PathChildrenCache(ct, "/node1", true);
            cache.start();
            cache.getListenable().addListener(new PathChildrenCacheListener() {
                //节点变化时的回调方法
                public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {
                    System.out.println(event.getType());
                    System.out.println(event.getData().getPath());
                    System.out.println(new String(event.getData().getData()));
                }
            });
            Thread.sleep(100000);
            cache.close();
    

     

    3.事务

    一系列操作要么全部成功,要么全部失败

     //开启事务
    ct.inTransaction()
            .create().forPath("/w","w".getBytes())
            .and()
            .delete().forPath("/zxc")
            //提交事务
            .and().commit();
    

      

  • 相关阅读:
    生活的乐趣
    android加载webview白屏问题
    强极则辱
    向studio项目中复制集成其他代码,项目R文件丢失
    每一步都是最好的选择
    JQuery小插件,Selected插件1
    JSON进阶三JSON的几种调用形式
    JSON进阶四前后台交互之美
    .NET双样式分页控件
    JSON进阶五JS和WCF的交互
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/12957091.html
Copyright © 2011-2022 走看看