keepererrorcode = connectionloss for 錯誤處理


自己的環境在虛擬機上,於是使用同事的環境調試問題,發現無法初始化成功,提示keepererrorcode = connectionloss for,於是上網查了下資料整理如下:

 

1.對比代碼中引用的jar庫是否跟服務器上的一致:

  服務器端:zookeeper-3.4.10.jar

  代碼端:zookeeper-3.4.9.jar

 

2.網上還有一種說法是連接還沒創建成功,就開始設置watcher了。我們可以在創建了鏈接后,判斷鏈接狀態OK了再進行下一步操作:

public static void waitUntilConnected(ZooKeeper zooKeeper, CountDownLatch connectedLatch) {  
        if (States.CONNECTING == zooKeeper.getState()) {  
            try {  
                connectedLatch.await();  
            } catch (InterruptedException e) {  
                throw new IllegalStateException(e);  
            }  
        }  
    }  

 

3.這里引申出zk的一個問題:

  在創建連接時,不管是否成功,都會給一個看似正確的pid,並不會管這個鏈接是否可用,或者正在連接。所以最好的方式是在創建連接后,對連接狀態進行判斷。

在我之前的博客中也遇到在solaris上用zk的時候,單線程和多線程版本使用在solaris和centos上不一致導致連,定位了好幾天,最后總結還是代碼沒有做好返回值判斷造成的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM