
全网搜了好一会,没找到满意的 ZooKeeper 的客户端会话状态图,我当场裂开。无奈之下,只好掏出我的 processon 来一发以示敬意。
ZooKeeper 的客户端会话状态分为以下几种:
CONNECTING,连接中ASSOCIATING,这个状态目前没有地方使用(通过IDEA->find usage发现没有地方使用这个枚举常量)CONNECTED,已连接并且建立会话CONNECTEDREADONLY,仅当服务器变为read only时且客户端支持只读连接,此时连接为只读连接CLOSED,关闭AUTH_FAILED,认证失败,副作用等同于CLOSED。因为认证失败后,EventThread、SendThread都会相继退出循环,变相宣告ZooKeeper的结束。NOT_CONNECTED,在第一次创建ZooKeeper对象时,就是NOT_CONNECED
下面是会话状态变更图:
点击查看【processon】
NOT_CONNECTED->CONNECTINGSendThread初始化时,会将会话状态设置为CONNECTING- 当调用
startConnect()开始构建TCP连接时,会将会话状态设置为CONNECTING
CONNECTING->CONNECTED- 当收到
ConnectRequest时,如果isRO=false,则将会话状态设置为CONNECTED
- 当收到
CONNECTING->CONNECTEDREADONLY- 当收到
ConnectRequest时,如果isRO=true,则将会话状态设置为CONNECTEDREADONLY
- 当收到
CONNECTING->CLOSED- 当收到
ConnectRequest时,如果协商的会话过期时间小于等于0,则将会话状态设置为CLOSED
- 当收到
CONNECTING->AUTH_FAILED- 执行
SASL认证失败 - 启用
SASL且配置错误
- 执行
CONNECTED->AUTH_FAILED- 执行
addAuth认证失败
- 执行
- (
CONNECTING、CONNECTED、CONNECTREADONLY)->CLOSE- 主动调用
close()
- 主动调用
