今天在學習zookeeper來實現配置管理的功能,因爲以前都是看資料來了解相關的知識,覺得對zookeeper的瞭解已經比較多,結果動起手來卻截然不同,並且是很是細微的一小地方讓我調試了老半天,細節見真章!就是卡在一個很簡單的一個地方,鏈接zookeeper服務器後判斷是否存在根節點,如不存在則建立。 服務器
ZooKeeper zk = new ZooKeeper(url,3000,new Watcher(){
@Override
public void process(WatchedEvent event) {
System.out.println("觸發了事件:"+ event.getType());
System.out.println("事件狀態:"+ event.getState());
}
});
if(zk.exists("/root", true) == null){
zk.create("/root", "root".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
而後運行的時候就報錯鏈接異常的信息,新手,而後一直覺得是url地址沒寫對,又仔細檢查了zookeeper的服務器,都沒啥問題,就是一直連不上,並且debug後肯定是在if(zk.exists("/root", true) == null)在這裏拋的異常,折騰了老半天!最後纔想是否是鏈接的時候初始化須要必定時間,還沒連上就運行到判斷這裏了,果斷添加了延遲時間後就能夠了。。。。修改後的代碼以下: ide
ZooKeeper zk = new ZooKeeper(url,3000,new Watcher(){
@Override
public void process(WatchedEvent event) {
System.out.println("觸發了事件:"+ event.getType());
System.out.println("事件狀態:"+ event.getState());
}
}); 學習
while(!"CONNECTED".equals(zk.getState().toString())){
Thread.sleep(3000);
}
url
if(zk.exists("/root", true) == null){ spa
zk.create("/root", "root".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); debug
} 調試
慚愧啊,個人第一次zookeeper之旅! 事件