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

目录

  • ZooKeeperMain
    • 数据结构
    • 初始化
    • 启动
    • 1. 解析启动参数
      • MyCommandOptions
        • 数据结构
        • 构造参数
      • parseOptions()
    • 2. 创建客户端实例
    • 3. 处理客户端命令
      • 1.解析命令字符串
      • 2. 处理命令

ZooKeeperMain

客户端的启动类为ZooKeeperMain

数据结构

《Zookeeper》源码分析(二十一)之 客户端启动过程_第1张图片

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

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

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

初始化

先看下ZooKeeperMain的静态代码块
《Zookeeper》源码分析(二十一)之 客户端启动过程_第2张图片

静态代码块的工作主要是将zookeeper支持的命令存放到commandMap和commandMapCli中,看下CommandFactory.Command中都定义了哪些命令:
《Zookeeper》源码分析(二十一)之 客户端启动过程_第3张图片

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

启动

在源码环境搭建的过程中,启动客户端是通过ZooKeeperMain类来启动的,它的main函数如下:
《Zookeeper》源码分析(二十一)之 客户端启动过程_第4张图片

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

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

1. 解析启动参数

MyCommandOptions

数据结构

在这里插入图片描述

构造参数

在这里插入图片描述

parseOptions()

解析启动时传入的命令参数
《Zookeeper》源码分析(二十一)之 客户端启动过程_第5张图片

2. 创建客户端实例

《Zookeeper》源码分析(二十一)之 客户端启动过程_第6张图片

3. 处理客户端命令

zookeeper使用jline作为监听命令的工具。
《Zookeeper》源码分析(二十一)之 客户端启动过程_第7张图片

将命令字符串传入executeLine()方法
《Zookeeper》源码分析(二十一)之 客户端启动过程_第8张图片

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

1.解析命令字符串

将输入端输入的命令字符串line进行切割处理,将数据存放到MyCommandOptions的参数中
《Zookeeper》源码分析(二十一)之 客户端启动过程_第9张图片

2. 处理命令

将第1步中的解析到的MyCommandOptions传入processCmd()方法中处理
《Zookeeper》源码分析(二十一)之 客户端启动过程_第10张图片

以上就是从控制台输入一条命令字符串到调用客户端实例zookeeper方法的过程。
《Zookeeper》源码分析(二十一)之 客户端启动过程_第11张图片

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

你可能感兴趣的:(Zookeeper,zookeeper,linux,分布式)