全网搜了好一会,没找到满意的 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
->CONNECTING
SendThread
初始化时,会将会话状态设置为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()
- 主动调用