天天看點

zookeeper實作分布式鎖

本文通過zookeeper實作分布式鎖,一共有兩個版本,分别是curator架構實作,javaapi實作

實作原理

zookeeper實作分布式鎖

原理圖

實作原理其實很簡單,就是利用了zookeeper的臨時有序節點實作,其實ID最小的節點獲得鎖權限,執行完之後,删除節點,其餘各點依次擷取鎖權限,類似于隊列FIFO的操作

demo實作:

1、curator實作

zookeeper實作分布式鎖

CuratorClientUtils工具類

CuratorClientUtils工具類,負責建立用戶端

zookeeper實作分布式鎖

鎖事件監聽器1

zookeeper實作分布式鎖

鎖事件監聽器2

LockWatcher負責監聽事件,包括節點的新增,删除,更改

zookeeper實作分布式鎖

DistributeLock1屬性和構造

zookeeper實作分布式鎖

DistributeLock2屬性和構造

zookeeper實作分布式鎖

DistributeLock3屬性和構造

DistributeLock類,分布式鎖主要類,實作分布式鎖的主要邏輯

zookeeper實作分布式鎖

測試代碼

zookeeper實作分布式鎖

測試結果資料

2、javaAPI實作:

zookeeper實作分布式鎖

用戶端代碼

zookeeper實作分布式鎖

分布式鎖監聽事件

zookeeper實作分布式鎖

DistributeLock1

zookeeper實作分布式鎖

DistributeLock2

zookeeper實作分布式鎖

DistributeLock3

測試方法都相同,在這就不貼了,代碼隻是邏輯的一個展現,不同架構其實實作底層都差不多,隻不過封裝模式不太一樣而已。

當然實作分布式鎖還有别的方法,例如資料庫實作,redis實作,總的來說原理都差不多,各有利弊吧,多看看可以舉一反三吧