zoukankan      html  css  js  c++  java
  • Curator 异步获取结果

    原声的ZooKeeper 的CRUD API有同步和异步之分,对于异步API,需要传递AsyncCallback回调。对于getData,getChildren,exists这三个API,还可以设置Watcher。这些功能在Curator中是如何实现的?

    在Curator中,可以通过如下三种方式来异步获取结果:

     1.inBackground()+CuratorListener

     2.inBackground(new BackgroundCallback(){ public void processResult(CuratorFramework client,CuratorEvent event){}})

     3.inBackground(newBackgroundCallback(){},Executor)

    以inBackground()+CuratorListener这种方式来使用异步API,如下:

                 client.getCuratorListenable().addListener(new CuratorListener(){
    
                    @Override
                    public void eventReceived(CuratorFramework client, CuratorEvent event) throws Exception {
                         // TODO Auto-generated method stub
                        if(event.getType()==CuratorEventType.CREATE){
                            System.out.println("create path="+event.getPath()+",code="+event.getResultCode());
                        }else if(event.getType()==CuratorEventType.GET_DATA){
                            System.out.println("get path="+event.getPath()+",data="+new String(event.getData()));
                        }else if(event.getType()==CuratorEventType.SET_DATA){
                            
                            System.out.println("set path="+event.getPath()+",data="+new String(client.getData().forPath(event.getPath()))/*+",data="+new String(event.getData())*/);
                        }else if(event.getType()==CuratorEventType.DELETE){
                            System.out.println("delete path="+event.getPath());
                        }
                        
        
                    }});

    接下来client的所有以inBackground()方式使用的API,其异步处理结果都是通过这个CuratorListener来处理。

    在第二中方式inBackground(BackgroundCallback)中,如下:

    client.create()
                .creatingParentsIfNeeded()
                .withProtection()
                .withMode(CreateMode.EPHEMERAL)
                .inBackground(new BackgroundCallback(){
    
                    @Override
                    public void processResult(CuratorFramework client, CuratorEvent event) throws Exception {
                        // TODO Auto-generated method stub
                      if(event.getType()==CuratorEventType.CREATE){
                          System.out.println("code:"+event.getResultCode()+"path:"+event.getPath()); 
                          
                          //client.getData().inBackground().forPath(event.getPath());
                      }
                    }  
                  } )
                .forPath("/francis/tmp/a","wbs".getBytes());
              
              
  • 相关阅读:
    HDU 1847 Good Luck in CET-4 Everybody!(博弈、找规律)
    HDU 1564 Play a game(博弈、找规律)
    HDU 2188 悼念512汶川大地震遇难同胞——选拔志愿者(巴什博弈)
    HDU 2516 取石子游戏(斐波那契博弈)
    HDU 1517 A Multiplication Game(博弈)
    HDU
    POJ-1182 食物链(并查集)
    POJ-1915 Knight Moves (BFS)
    python模块详解 time与date time
    python模块介绍和 import本质
  • 原文地址:https://www.cnblogs.com/francisYoung/p/5458615.html
Copyright © 2011-2022 走看看