前面Zookeeper的链接使用的都是其提供的原生代码,实际开发过程中非常底层的细节开发工作如连接重连,反复注册等耗费开发人员大量的工作精力并且重复工作。而开源客户端Curator的出现解决了该类问题,当然也有其他开源开源客户端解决此类问题如ZkClient等。

  本文的关注点是Curator如何创建与Zookeeper之间的会话,其使用了工厂设计模式。在介绍创建会话之前可以先温习下工厂设计模式,网络上文章比较多选自己能理解的参考阅读,推荐一篇(https://www.toutiao.com/i6697059170643870221/?tt_from=mobile_qq&utm_campaign=client_share&timestamp=1603481163&app=news_article&utm_source=qzone&utm_medium=toutiao_android&use_new_style=1&req_id=20201024032603010014047075261FD672&group_id=6697059170643870221)。

  上本文案例源码:

    

  上图中创建了两个client再启用命令start链接到Zookeeper,看着方式并不一样。其实本质一样,略有区别的是后者client参数设置多了个命名空间。这个差别具体链接到Zookeeper体现在何处,后面详述。

  为啥本质无差别,看看newClient的实现:

    

  具体源码分析前,首先看一下主函数中使用的几个类的UML图:

    

    

  CuratorFramework的实现为什么选择CuratorFrameworkImpl?因为其build硬编码为CuratorFrameworkImpl:

    

  从整个创建的逻辑看,还是比较直观的——重点在两个方法:build和start。build是CuratorFrameworkFactory静态内部类Bulider中的方法。几个类的大致功能基本可以确定:Builder设置参数并创建一个CuratorFramework的实现对象;CuratorFramework启用命令start链接到Zookeeper,对用户屏蔽Zookeeper提供链接的底层API。

  从设计模式的维度看,创建会话的过程应用了工厂方法设计模式、命令设计模式,还有fluent风格的编程方式。

  

Zookeeper开源客户端Curator之创建会话的更多相关文章

  1. Zookeeper开源客户端Curator的使用

    开源zk客户端-Curator 创建会话: RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,3); CuratorFramewor ...

  2. 八:Zookeeper开源客户端Curator的api测试

    curator是Netflix公司开源的一套ZooKeeper客户端,Curator解决了很多ZooKeeper客户端非常底层的细节开发工作.包括连接重连,反复注册Watcher等.实现了Fluent ...

  3. zookeeper开源客户端curator

    zookeeper的原生api相对来说比较繁琐,比如:对节点添加监听事件,当监听触发后,我们需要再次手动添加监听,否则监听只生效一次:再比如,断线重连也需要我们手动代码来判断处理等等.对于curato ...

  4. Zookeeper开源客户端Curator之事件监听详解

    Curator对Zookeeper典型场景之事件监听进行封装,提供了使用参考.这篇博文笔者带领大家了解一下Curator的实现方式. 引入依赖 对于Curator封装Zookeeper的典型场景使用都 ...

  5. ZooKeeper(3.4.5) - 开源客户端 Curator(2.7.0) 的简单示例

    一.创建会话 1. 创建会话 package com.huey.dream.demo; import org.apache.curator.framework.CuratorFramework; im ...

  6. 12. ZooKeeper之Java客户端API使用—创建会话。

    转自:https://blog.csdn.net/en_joker/article/details/78686649 客户端可以通过创建一个ZooKeeper(org.apache.zookeeper ...

  7. Apache Zookeeper Java客户端Curator使用及权限模式详解

    这篇文章是让大家了解Zookeeper基于Java客户端Curator的基本操作,以及如何使用Zookeeper解决实际问题. Zookeeper基于Java访问 针对zookeeper,比较常用的J ...

  8. Zookeeper开源客户端框架Curator简介

    Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理很多事情 ...

  9. Zookeeper开源客户端框架Curator简介[转]

    Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理很多事情 ...

随机推荐

  1. vue 前进刷新后退不刷新

    这边是router-view部门的写法: <keep-alive> <router-view v-if="$route.meta.keepAlive"/> ...

  2. Android一句话 | ViewGroup事件分发

    ViewGroup中可重写的关于事件分发的事件有dispatchTouchEvent,onTouchEvent,onInterceptTouchEvent和requestDisallowInterce ...

  3. 云计算实验二 Docker实验-mysql、tomcat、sqlserver、redis、oracle、mongo安装

    mysql安装 下载镜像 docker pull mysql 查看镜像 docker images|grep mysql 创建启动容器 docker run --name mysqlserver -v ...

  4. 【记录一个问题】铁威马NAS存储中的python3,安装后找不到xml这个包

    如题 因为找不到xml,所以无法安装setuptools 因为无法安装setuptools,所以无法安装pip3 现在准备重新下载python3的源码自己编译. 铁威马的系统中还缺少libm这个库,导 ...

  5. 【记录一个问题】运算迁移到gpu后的计时问题

    我把部分计算迁移到GPU后,发现以帧率计算的程序,帧率下降:但是看各个函数的时间,又比之前减少了. 很奇怪,既然各个函数的时间减少,为什么帧率反而下降? 原来计算帧率使用了 gettimeofday( ...

  6. 工作自动化,替代手工操作,使用python操作MFC、windows程序

    目录 背景--为什么要自动化操作? 方法--怎么实现自动化操作? 查找窗体 发送消息 获取文本 总结 背景--为什么要自动化操作? 工作中总是遇到反复重复性的工作?怎么用程序把它变成自动化操作?将程序 ...

  7. gin框架简介

    介绍 Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点 对于golang而言,web框架的依赖要远比Python,Java之类的要小.自身的n ...

  8. golang中结构体中的嵌套

    package main import "fmt" type Base struct { name string } func (b *Base) m1() int { retur ...

  9. Tomcat服务器和Servlet版本的对应关系

    Tomcat服务器和Servlet版本的对应关系 Servlet 程序从2.5版本是现在世面使用最多的版本(xml配置) 到了Servlet3.0后.就是注解版本的Servlet使用

  10. python列表和索引--7

    备注:列表元素索引下限从0开始,列表用[ ]表示