天天看點

基于curator實作leader選舉

1.前言

curator由Netflix的工程師開發,主要目的為了基于zookeeper的應用變得簡單可靠,在2013年成為apache的頂級項目。curator基于zookeeper,但提供了更進階别的

API抽象以及工具集,并對zookeeper提供的常用功能進行了封裝和擴充,例如leader選舉、分布式鎖、服務發現、緩存等功能,進而使開發者在實作這些功能時不用在實作

哪些無聊的程式化代碼段,也減少出錯的可能性。

2.本文主要講解如何利用curator實作leader選舉,并對curator提供的兩種實作形式進行對比

2.1 通過LeaderSelector進行leader選舉

建議通過LeaderSelectorListenerAdapter實作,當某個執行個體成為leader後,會調用對應執行個體的takeLeadership方法,此方法執行期間,此執行個體一直占着leader權,

當takeLeadership方法執行結束,執行個體自動釋放leader權,所有執行個體重新進行leader選舉

執行類

執行結果

2.2 通過LeaderLatch實作leader選舉,具體實作LeaderLatchListener來實作,

當執行個體成為leader後,會調用isLeader()方法,之後除非此執行個體連接配接不到zookeeper,否側将一直占着leader權,當失去leader權後會調用notLeader()方法,為了模拟

選舉過程,我們追加了一個ScheduledExecutorService來周期性的自己釋放leader權

啟動類

執行結果