《源码_Zookeeper》_Zookeeper 客户端启动流程
2018-11-25 本文已影响33人
tjhuey
客户端的启动环节,实际上就是Zookeeper对象的实例化过程。
1.设置默认Watcher 2.设置ZK服务地址列表 3.创建控制事件线程和消费线程的ClientCnxn
客户端相关组件

客户端启动架构图

相关跟踪图









汇总笔记
客户端启动流程
>org.apache.zookeeper.ZooKeeper.ZooKeeper(java.lang.String, int, org.apache.zookeeper.Watcher) 构造器进入
>org.apache.zookeeper.ZooKeeper.ZooKeeper(java.lang.String, int, org.apache.zookeeper.Watcher, boolean) 重载构造器
>org.apache.zookeeper.client.ConnectStringParser.ConnectStringParser 集群地址解析器封装
>org.apache.zookeeper.client.StaticHostProvider.StaticHostProvider 服务地址管理器
>org.apache.zookeeper.ClientCnxn 创建客户端网络链接器
>org.apache.zookeeper.ZooKeeper.ZKWatchManager 事件管理者生成
>org.apache.zookeeper.ClientCnxn.ClientCnxn(java.lang.String, org.apache.zookeeper.client.HostProvider, int, org.apache.zookeeper.ZooKeeper, org.apache.zookeeper.ClientWatchManager, org.apache.zookeeper.ClientCnxnSocket, long, byte[], boolean) 客户连接器对象构造器
>org.apache.zookeeper.ClientCnxn.SendThread.SendThread 客户端与服务 znode处理线程
>org.apache.zookeeper.ClientCnxn.EventThread.EventThread 客户端与服务端 事件处理线程 (LinkedBlockingQueue
>org.apache.zookeeper.ClientCnxn.start 模板启动两个线程
>org.apache.zookeeper.ClientCnxn.SendThread.run 启动
>org.apache.zookeeper.ClientCnxn.SendThread.startConnect 开始连接
>org.apache.zookeeper.ClientCnxnSocket.connect 连接模板
>org.apache.zookeeper.ClientCnxnSocketNIO.registerAndConnect nio连接
>org.apache.zookeeper.ClientCnxnSocket.doTransport 传输
>org.apache.zookeeper.ClientCnxnSocketNIO.doTransport
>org.apache.zookeeper.ClientCnxn.SendThread.primeConnection 实例ConnectRequest,准备连接数据Packe封装
>org.apache.zookeeper.ClientCnxnSocketNIO.doIO IO传输Packet数据
>org.apache.zookeeper.ClientCnxnSocket.readConnectResult 连接结果
>org.apache.zookeeper.ClientCnxn.SendThread.readResponse 响应数据
>org.apache.zookeeper.WatchedEvent 生成事件
> org.apache.zookeeper.ClientCnxn.EventThread.queueEvent 委托EventThread 队列处理
>org.apache.zookeeper.ClientCnxn.EventThread.run 启动
>org.apache.zookeeper.ClientCnxn.EventThread.processEvent 处理事件
>org.apache.zookeeper.Watcher.process 客户具体处理 队列循环
总结
1.C/S架构的原理都一个套路,服务端一个大线程去准备初始化功能等待客户端,客户端一个大线程通过传人动态数据去连接服务端。2.线程中通过某些数据结构比如队列,链表等的机制去做自己想做的事,剩下就是组件化分工与合并 协作起来。
参考
官网:http://zookeeper.apache.org
书籍:从Paxos到Zookeeper
网课: 推荐 慕课网 图灵学院 谷粒学院