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());
              
              
  • 相关阅读:
    nginx配置https访问
    nginx解决带_的head内容丢失
    软件开发报价的计算方法(转载)
    使用游标批量初始化密码
    调用WScript.Shell时产生Automation 服务器不能创建对象的错误
    用.NET SqlBulkCopy类执行批量插入数据到数据库
    XML文件做数据源的读取使用
    页面实现数据库备份(还原)实例
    特定的ExcelCSS样式Excel导出
    索引的初步学习总结
  • 原文地址:https://www.cnblogs.com/francisYoung/p/5458615.html
Copyright © 2011-2022 走看看