實現原理
**實現
>
>
org.apache.zookeepergroupid
>
>
zookeeperartifactid
>
>
3.4.14version
>
dependency
>
public
class
zklock
implements
autocloseable
, watcher
public
boolean
getlock
(string businesscode)
//建立瞬時有序節點 /order/order_00000001
znode = zookeeper.
create
("/"
+ businesscode +
"/"+ businesscode +
"_", businesscode.
getbytes()
, zoodefs.ids.open_acl_unsafe,
createmode.ephemeral_sequential)
;//獲取業務節點下 所有的子節點
list
childrennodes = zookeeper.
getchildren
("/"
+ businesscode,
false);
//子節點排序
collections.
sort
(childrennodes)
;//獲取序號最小的(第乙個)子節點
string firstnode = childrennodes.
get(0)
;//如果建立的節點是第乙個子節點,則獲得鎖
if(znode.
endswith
(firstnode)
)//不是第乙個子節點,則監聽前乙個節點
string lastnode = firstnode;
for(string node:childrennodes)
else
}synchronized
(this
)return
true;}
catch
(exception e)
return
false;}
@override
public
void
close()
throws exception
@override
public
void
process
(watchedevent event)}}
}
我們可以寫乙個測試類
@test
public
void
testzklock()
throws exception
可以看到,鎖的獲取和釋放都沒有問題
curator使用
還有一種zookeeper分布式鎖的實現方式,就是用zookeeper的客戶端curator
,它已經內建了zookeeper的分布式鎖
使用其他也很簡單
>
>
org.apache.curatorgroupid
>
>
curator-recipesartifactid
>
>
4.2.0version
>
dependency
>
@bean
(initmethod=
"start"
,destroymethod =
"close"
)public curatorframework getcuratorframework()
(
"curatorlock"
)public string curatorlock()
}catch
(exception e)
finally
catch
(exception e)
} log.
info
("方法執行完成!");
return
"方法執行完成!";}
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的乙個持久...