1. 程式人生 > >Zookeeper異常ConnectionLossException解決

Zookeeper異常ConnectionLossException解決

exists 發出 create zookeeper keep exc loss 之間 log

項目中要求做一個將配置文件讀取到zookeeper節點上的工具:

開發代碼如下:

技術分享

技術分享

技術分享

但是當連接到遠端的Zookeeper服務之後,出現了下面異常:

Exception in thread "main" org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /test
at org.apache.zookeeper.KeeperException.create(KeeperException.Java:99)
at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:1501)
at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:1529)
at com.jiq.test.ZooKeeperTest.main(ZooKeeperTest.java:12)

原因:

new出ZooKeeper實例時只是建立了與服務端之間的會話,此時TCP連接可能還未建立完成,如果這時發出ZooKeeper操作命令的確會出現連接丟失異常,雖然這種概率相對較小。

當客戶端與服務端連接建立之後客戶端會收到一個SyncConnected事件,此時將connectedSemaphore減到零就可以讓阻塞的主線程繼續運行,再來發出ZooKeeper操作命令就不會出現連接丟失的異常了。

解決方法:

將上圖中註釋的代碼放出來就可以啦!

Zookeeper異常ConnectionLossException解決