基於zookeeper實現分布式鎖

2021-10-17 10:55:18 字數 2490 閱讀 4430

zk有兩種資料節點,一種時持久節點

另一種時瞬時節點,有序,瞬時節點不可再有子節點,會話結束後瞬時節點自動消失

zookeeper的觀察器

可以設定觀察器的三個方法:getdata();getchildren();exist();

資料節點發生變化,傳送給客戶端

觀察器只能監控一次,再監控需要重新設定

zk分布式鎖的實現原理

利用zookeeper的瞬時有序節點的特性

多執行緒併發建立瞬時節點時得到有序的序列

序號最小的執行緒獲得鎖

其他的執行緒則監聽自己序號的前乙個序號

前乙個執行緒執行完成,刪除自己序號的節點

下乙個序號的執行緒得到通知繼續執行

實現**

@slf4j

public

class

zklock

implements

autocloseable

, watcher

public

boolean

getlock

(string businesscode)

//建立瞬時有序節點 /order/orde_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

(keeperexception e)

catch

(interruptedexception e)

return

false;}

@override

public

void

close()

throws exception

@override

public

void

process

(watchedevent event)}}

}

在業務**中使用zk分布式鎖

@service

@slf4j

public

class

zklockservice

}catch

(ioexception e)

catch

(exception e)

log.

info

("方法執行完成");

return

"fail";}

}

zk curator客戶端實現分布式鎖

curator客戶端直接實現了分布式鎖的方法,直接呼叫就可以

在spring中配置curator客戶端

@bean

(initmethod=

"start"

,destroymethod =

"close"

)public curatorframework getcuratorframework()

在業務**中使用

@service

@slf4j

public

class

zklockservice

}catch

(ioexception e)

catch

(exception e)

finally

catch

(exception e)

} log.

info

("方法執行完成!");

return

"方法執行完成!";}

}

Dubbo基於Zookeeper實現分布式服務

點關注不迷路,歡迎再訪!精簡部落格內容,盡量已行業術語來分享。努力做到對每一位認可自己的讀者負責。幫助別人的同時更是豐富自己的良機。既然是新手教學,肯定很多同學不明白什麼是分布式和遠端服務呼叫,為什麼要分布式,為什麼要遠端呼叫。下圖為例 以前什麼的都在乙個伺服器上,呼叫方法直接就自然而然呼叫了,沒啥...

基於ZooKeeper實現分布式鎖

zookeeper 保證了資料的強一致性,zk集群中任意節點 乙個zkserver 上的相同znode下的資料一定是相同的。使用zookeeper可以非常簡單的實現分布式鎖,其基本邏輯如下 客戶端呼叫create 方法建立名為 locknode lock 的節點,需要注意的是,這裡節點的建立型別需要...

基於ZooKeeper的分布式鎖實現(C 版本)

一 簡介 分布式同步是zookeeper的功能之一,但zookeeper的分布式同步 分布式鎖 功能並非以直接的介面呈現的。開發者需要額外地基於zookeeper的節點 node 的分布式同步特性來實現分布式鎖的介面。本文將提供基於基於zookeeper的分布式鎖的c 介面及實現,實現中用到了部分c...