zookeeper常常在微服務(wù)系統(tǒng)中扮演核心的角色,我們在使用zookeeper時也遇到了一些容易犯的坑咆课。比如某個時間突然發(fā)現(xiàn)rpc server流量沒了末誓,上去服務(wù)看了下zk連接還在,進(jìn)一步發(fā)現(xiàn)臨時節(jié)點(diǎn)沒了...跟了下rpc server的日志看到书蚪,見截圖:
參考下代碼注釋:
`
const (
StateUnknown State = -1
StateDisconnected State = 0
StateConnecting State = 1
StateAuthFailed State = 4
StateConnectedReadOnly State = 5
StateSaslAuthenticated State = 6
StateExpired State = -112
StateConnected = State(100)
StateHasSession = State(101)
)
const (
FlagEphemeral = 1
FlagSequence = 2
)
`
可以看到喇澡,client斷開連接后重連,session過期后也重新創(chuàng)建了殊校。但是晴玖,server創(chuàng)建的臨時節(jié)點(diǎn)消失了。原來为流,zookeeper的臨時節(jié)點(diǎn)呕屎、watcher等都是和session綁定的!而一旦session過期敬察,zookeeper server就會清除和session有關(guān)的這些狀態(tài)和數(shù)據(jù)秀睛。client要做的就是重建連接,重新創(chuàng)建臨時節(jié)點(diǎn)莲祸,重新watch蹂安。另外watch本身也有要注意的,收到事件通知后锐帜,需要重新注冊watcher田盈。