《源码_Zookeeper》_Zookeeper 客户端启动流程

客户端的启动环节,实际上就是Zookeeper对象的实例化过程。
1.设置默认Watcher 2.设置ZK服务地址列表 3.创建控制事件线程和消费线程的ClientCnxn

客户端相关组件

《源码_Zookeeper》_Zookeeper 客户端启动流程_第1张图片
image.png

客户端启动架构图

image.png

相关跟踪图

《源码_Zookeeper》_Zookeeper 客户端启动流程_第2张图片
image.png
《源码_Zookeeper》_Zookeeper 客户端启动流程_第3张图片
image.png

《源码_Zookeeper》_Zookeeper 客户端启动流程_第4张图片
image.png
《源码_Zookeeper》_Zookeeper 客户端启动流程_第5张图片
image.png

《源码_Zookeeper》_Zookeeper 客户端启动流程_第6张图片
image.png
《源码_Zookeeper》_Zookeeper 客户端启动流程_第7张图片
image.png

《源码_Zookeeper》_Zookeeper 客户端启动流程_第8张图片
image.png

《源码_Zookeeper》_Zookeeper 客户端启动流程_第9张图片
image.png

《源码_Zookeeper》_Zookeeper 客户端启动流程_第10张图片
image.png

汇总笔记

客户端启动流程
>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
网课: 推荐 慕课网 图灵学院 谷粒学院

你可能感兴趣的:(《源码_Zookeeper》_Zookeeper 客户端启动流程)