
更多精彩内容,请关注微信公众号:后端技术小屋
zk client: github.com/samuel/go-zookeeper
<1>一、zk client 状态zookeeper 是一款流行的分布式协调组件,被广泛用于 leader 选举、分布式锁、服务发现、名称服务、配置中心等场景。
zk client 与 zk server 在建立连接、保持连接、断开连接的过程中,会经历各种状态。如下所示
const( // 暂未使用 StateUnknownState=-1 // 与 zk server 之间的连接断开(也包含初始状态),此时 zk client 会不断重连 StateDiscOnnectedState=0 // 与 zk server 建立连接之前的暂时状态,表示即将 connect zk server StateCOnnectingState=1 // 暂未使用 StateAuthFailedState=4 // 暂未使用 StateCOnnectedReadOnlyState=5 // 暂未使用 StateSaslAuthenticatedState=6 // 在和 zk server 重新建立 TCP 连接之后,握手阶段发现 session 超时 StateExpiredState=-112 // 在和 zk server 成功建立 TCP 连接之后的状态 StateCOnnected=State(100) // 和 zk server 成功建立 TCP 连接,并且成功握手(即成功创建 session) StateHasSession=State(101) ) 超时时间很大程度上影响了上述状态的转换,有三个超时时间值得关注:
func(c*Conn)setTimeouts(sessionTimeoutMsint32){ c.sessiOnTimeoutMs=sessionTimeoutMs sessionTimeout:=time.Duration(sessionTimeoutMs)*time.Millisecond c.recvTimeout=sessionTimeout*2/3 c.pingInterval=c.recvTimeout/2 } //Connectestablishesanewconnectiontoapoolofzookeeper //servers.Theprovidedsessiontimeoutsetstheamountoftimeforwhich //asessionisconsideredvalidafterlosingconnectiontoaserver.Within //thesessiontimeoutit'spossibletoreestablishaconnectiontoadifferent //serverandkeepthesamesession.Thisismeansanyephemeralnodesand //watchesaremaintained 如果 client 和 server 端连接发生异常,可分为三种情况:
推荐阅读
更多精彩内容,请扫码关注微信公众号:后端技术小屋。如果觉得文章对你有帮助的话,请多多分享、转发、在看。
1 AngryPanda 2021-02-24 19:57:09 +08:00 不错,终于看到了二维码 |