zk 節(jié)點(diǎn)類型
方式
通過在zookeeper一個(gè) /lock 下創(chuàng)建臨時(shí)順序子節(jié)點(diǎn),判斷 /lock下面所有的子節(jié)點(diǎn)中,最小的子節(jié)點(diǎn)id自己的是否一致,一致就獲取鎖辙纬,否則watch 比自己小的前一個(gè)子節(jié)點(diǎn)
docker-compose.yml
# https://www.cnblogs.com/studyjobs/p/18227639
version: '3.2'
services:
zoo1:
image: zookeeper:latest
restart: always
container_name: zookeeper
ports:
- "2181:2181"
- "8080:8080"
volumes:
- ./data:/data
- ./datalog:/datalog
lock with go
package main
import (
"time"
"github.com/samuel/go-zookeeper/zk"
)
func main() {
c, _, err := zk.Connect([]string{"127.0.0.1:2181"}, time.Second) //*10)
if err != nil {
panic(err)
}
l := zk.NewLock(c, "/lock", zk.WorldACL(zk.PermAll))
err = l.Lock()
if err != nil {
panic(err)
}
println("lock succ, do your business logic")
time.Sleep(time.Second * 10)
// do some thing
l.Unlock()
println("unlock succ, finish business logic")
}
Lock 里面增加了打印
fmt.Println("lock path:" + l.lockPath)
fmt.Println("lock seq:" , l.seq)
output
Connected to 127.0.0.1:2181
authenticated: id=72057615950807046, timeout=4000
re-submitting `0` credentials after reconnect
lock path:/lock/_c_9078579ce858810df3f9fc9a779e9d80-lock-0000000006
lock seq: 6
lock succ, do your business logic
unlock succ, finish business logic
Zookeeper 圖形化的客戶端工具(ZooInspector)下載
ref
最后編輯于 :2024.06.29 13:39:21
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者