• 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());
              
              
  • 相关阅读:
    Ubuntu16.04下搭建LAMP环境
    关于下载SAE日志签名认证的方法——PHP版
    时隔这么长时间,又回来写博客了
    转战网站后台与python
    学习之路
    周末随笔
    Shell基础-环境变量配置文件
    关于骑行
    MYSQL 8.0 linux安装步骤
    一个golang项目笔记 (二) 动态加载库
  • 原文地址:https://www.cnblogs.com/francisYoung/p/5458615.html
Copyright © 2020-2023  润新知