根據zookeeper結點的特點,可以通過建立臨時有序節點來建立排他鎖。
先進先出佇列
通過getchildren獲取指定根節點下的所有子節點,子節點就是任務
確定自己節點在子節點中的順序
如果自己不是最小的子節點,那麼監控比自己小的上乙個子節點,否則處於等待
接收watcher通知,重複流程
引入pom
org.apache.zookeeper<
/groupid>
zookeeper<
/artifactid>
3.4.8
<
/version>
<
/dependency>
public
class
mydistributelock
;//節點的資料
private countdownlatch countdownlatch=
newcountdownlatch(1
);private
int sessiontimeout=
5000
;private string lockid;
//記錄鎖節點id
public
mydistributelock()
private zookeeper getinstance()
}});
}catch
(ioexception e)
return zookeeper;
}public
void
lock()
throws keeperexception, interruptedexception
string first=sortedset.
first()
;if(lockid.
equals
(first)
) sortedset
lessthanlockid=sortedset.
headset
(lockid);if
(!lessthanlockid.
isempty()
)}public
void
unlock()
catch
(interruptedexception e)
catch
(keeperexception e)
}public
static
void
main
(string[
] args)
catch
(exception e)
finally}}
}).start()
;}}}
public
class
mywatcher
implements
watcher
@override
public
void
process
(watchedevent event)
}}
Zookeeper實現分布式鎖
zookeeper實現分布式鎖 實現分布式環境下同步鎖的實現 author hao.wang date 2017 1 20 15 43 public class distributelockdemo implements watcher catch ioexception e catch inter...
Zookeeper實現分布式鎖
curatorframework提供的方法 方法名描述 create 開始建立操作,可以呼叫額外的方法 比如方式mode 或者後台執行background 並在最後呼叫forpath 指定要操作的znode delete 開始刪除操作.可以呼叫額外的方法 版本或者後台處理version or bac...
Zookeeper實現分布式鎖
一 分布式鎖介紹 分布式鎖主要用於在分布式環境中保護跨程序 跨主機 跨網路的共享資源實現互斥訪問,以達到保證資料的一致性。二 架構介紹 在介紹使用zookeeper實現分布式鎖之前,首先看當前的系統架構圖 解釋 左邊的整個區域表示乙個zookeeper集群,locker是zookeeper的乙個持久...