《Zookeeper》源码分析(二十一)之 客户端启动过程

ZooKeeperMain

客户端的启动类为ZooKeeperMain

数据结构

在这里插入图片描述

commandMap:存放zookeeper支持的命令,key为命令关键字,value为命令参数

commandMapCli:存放zookeeper的命令实例,每一个实例包括命令的名字、参数列表

zk:客户端实例,处理命令并将命令发送给服务器

初始化

先看下ZooKeeperMain的静态代码块
在这里插入图片描述

静态代码块的工作主要是将zookeeper支持的命令存放到commandMap和commandMapCli中,看下CommandFactory.Command中都定义了哪些命令:
在这里插入图片描述

枚举类Command中定义的命令都是CliCommand的继承类,接下来分析CliCommand。

启动

在源码环境搭建的过程中,启动客户端是通过ZooKeeperMain类来启动的,它的main函数如下:
在这里插入图片描述

从这个过程可以看出启动过程主要有两步:

  1. 解析启动选项参数,即-开头的参数
  2. 创建客户端实例connectToZK()
  3. 运行ZooKeeperMain的run()函数执行命令

1. 解析启动参数

MyCommandOptions

数据结构

在这里插入图片描述

构造参数

在这里插入图片描述

parseOptions()

解析启动时传入的命令参数
在这里插入图片描述

2. 创建客户端实例

在这里插入图片描述

3. 处理客户端命令

zookeeper使用jline作为监听命令的工具。
在这里插入图片描述

将命令字符串传入executeLine()方法
在这里插入图片描述

接下来我们逐一分析这些过程

1.解析命令字符串

将输入端输入的命令字符串line进行切割处理,将数据存放到MyCommandOptions的参数中
在这里插入图片描述

2. 处理命令

将第1步中的解析到的MyCommandOptions传入processCmd()方法中处理
在这里插入图片描述

以上就是从控制台输入一条命令字符串到调用客户端实例zookeeper方法的过程。
在这里插入图片描述

蓝色部分对于不同的命令有所不同,而客户端在解析命令以及将其发送到服务端的过程是一样的。客户端最终通过ClientCnxn和ClientCnxnSocket将命令发送给服务端处理,并等待处理结果。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值