一、為什麼不使用原始的api來操作zk
zookeeper的watcher是一次性的,用過了需要再註冊
session的超時後沒有自動重連,生產環境中如果網路出現不穩定情況,那麼這種情況出現的更加明顯
沒有領導選舉機制,集群情況下可能需要實現stand by,乙個服務掛了,另乙個需要接替的效果
客戶端只提供了儲存byte陣列的介面,而專案中一般都會使用物件
客戶端介面需要處理的異常太多,並且通常,我們也不知道如何處理這些異常
二、zkclient 框架的基本使用
三、curator框架的基本操作
四、zookeeper實現分布式共享鎖
建立公共類
//獲取zk的連線
public
class
zookeeperutills}}
);trycatch
(interruptedexception e)
return zookeeper;
}catch
(ioexception e)
return null;
}public
static integer getsessiontimeout()
}
建立核心類
public
class
distributelock
;private countdownlatch countdownlatch =
newcountdownlatch(1
);public
distributelock()
public
void
lock()
//4. 取出第乙個,然後比較第乙個是不是自己,如果是則表示獲取到了鎖
string first = sorted.
first()
;if(first.
equals
(lockid)
)else}}
);}}
}}catch
(keeperexception e)
catch
(interruptedexception e)
}public
void
unlock()
catch
(interruptedexception e)
catch
(keeperexception e)
}}
測試類
public
class
distributemain
catch
(interruptedexception e)
finally}}
).start()
;}}}
五、zkclient實現leader選舉
封裝乙個選舉物件
public
class
user
implements
serializable
public
void
setid
(int id)
public string getname()
public
void
setname
(string name)
@override
public string tostring()
';}}
封裝乙個工具類
public
class
zkclientutils
public
static integer getsessiontimeout()
}
封裝核心選舉類
public
class
masterselector
@override
public
void
handledatadeleted
(string path)
throws exception };
}//選舉的方法
public
void
selector()
},5,timeunit.seconds);}
catch
(exception e)
else}}
//釋放鎖
public
void
releasemaster()
}//開啟
public
void
start()
}//結束
public
void
stop()
}
測試選舉
public
class
selectorclient
catch
(interruptedexception e)}}
);}}
}
一文看懂kylin
kylin到底解決了什麼關鍵問題 要徹底的解決掉資料查詢時間隨著資料量的增長而成線性增長的規律 kylin適合哪類資料的處理 通常查詢資料,一般是統計結果,如果是統計結果,必然會按照維度來進行聚合,kylin的工作原理是多維立方體分析,適合需要從多個維度來觀察資料的查詢。維度,看資料的角度,比如地區...
一文看懂xml
先簡單介紹下html xml xpath 1.html 超文字語言,用來展示資料。2.xml 可擴充套件標記語言,用來傳輸資料。僅僅是純文字,標籤可自定義。3.xpath 專門在xml中查詢資訊的語言。xml 文件必須包含根元素。該元素是所有其他元素的父元素。xml 文件中的元素形成了一棵文件樹。這...
一文讀懂Nginx
問 nginx的負載均衡演算法有什麼?預設是什麼演算法?答 1 輪詢 按請求的時間輪詢查空閒的後端伺服器 2 指定輪詢機率 機率的原因是後端伺服器的效能不均勻,好的多分點,差的少分點 3 固定ip繫結固定伺服器 預設是加權輪詢,就是優先訪問權重高的伺服器 問 nginx是單執行緒的嗎?答 是單執行緒...