Zookeeper-curator


  • 工厂类创建客户端:CuratorFrameworkFactory
    • connectionString:服务器地址列表;逗号分隔
    • retryPolicy:重试策略
      • 可以通过判断服务器返回的 keeperException 的状态代码来判断是否进行重试处理
        • OK 表示一切操作都没有问题
        • SYSTEMERROR 表示系统或服务端错误
      • ExponentialBackoffRetry 重试一组次数,重试之间的睡眠时间增加
      • RetryNTimes 重试最大次数
      • RetryOneTime 只重试一次
      • RetryUntilElapsed 在给定的时间结束之前重试
    • sessionTimeoutMs 会话超时时间;作用在服务端
      • 用来设置该条会话在 ZooKeeper 服务端的失效时间
    • connectionTimeoutMs 客户端创建会话的超时时间; 作用在客户端
      • 用来限制客户端发起一个会话连接到接收 ZooKeeper 服务端应答的时间
  • 创建节点
    • curatorFramework.create().withMode(CreateMode.PERSISTENT).forPath
  • 一次性创建带层级结构的节点
    • curatorFramework.create().creatingParentsIfNeeded().forPath
  • 获取数据
    • curatorFramework.getData().forPath
  • 更新节点
    • curatorFramework.setData().forPath
  • 删除节点
    • curatorFramework.delete().guaranteed().deletingChildrenIfNeeded().forPath
    • guaranteed:起到一个保障删除成功的作用
      • 只要该客户端的会话有效,就会在后台持续发起删除请求,直到该数据节点在 ZooKeeper 服务端被删除
    • deletingChildrenIfNeeded:系统在删除该数据节点的时候会以递归的方式直接删除其子节点,以及子节点的子节点
  • 异步接口 BackgroundCallback,用来处理服务器端返回来的信息,默认在 EventThread 中调用,也可以自定义线程池
    • curatorFramework.getData().inBackground(BackgroundCallback).forpath
    • 指定线程池
      • curatorFramework.getData().inBackground(BackgroundCallback,ExecutorService).forpath
  • Curator 监听器 CuratorListener
    • 针对 background 通知和错误通知。使用此监听器之后,调用 inBackground 方法会异步获得监听
  • Curator Caches
    • Curator 引入了 Cache 来实现对 Zookeeper 服务端事件监听
    • Cache 事件监听可以理解为一个本地缓存视图与远程 Zookeeper 视图的对比过程
    • Cache 提供了反复注册的功能
      • Cache 分为两类注册类型:节点监听和子节点监听
    • NodeCache 对某一个节点进行监听,可以通过注册监听器来实现,对当前节点数据变化的处理
      • NodeCache nodeCache = new NodeCache(curatorFramework, "/node")
      • nodeCache.getListenable().addListener()
      •  nodeCache.start();
    • PathChildrenCache 会对子节点进行监听,但是不会对二级子节点进行监听,可以通过注册监听器来实现,对当前节点的子节点数据变化的处理
      • var pathChildrenCache = new PathChildrenCache(curatorFramework, PATH, true);
      • pathChildrenCache.getListenable().addListener
      • pathChildrenCache.start(true); 如果设置为true则在首次启动时就会缓存节点内容到Cache中
    • TreeCache 使用一个内部类TreeNode来维护这个一个树结构。并将这个树结构与ZK节点进行了映射。所以TreeCache 可以监听当前节点下所有节点的事件;可以通过注册监听器来实现,对当前节点的子节点,及递归子节点数据变化的处理
      • TreeCache treeCache = new TreeCache(curatorFramework, TREE_CACHE);
      • treeCache.getListenable().addListener
      • treeCache.start();

文章作者: 钱不寒
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 钱不寒 !
  目录