Zookeeper實現分布式鎖

2021-10-13 10:36:57 字數 2442 閱讀 7980

實現原理

**實現

>

>

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的乙個持久...