https://github.com/g0194776/dlock
ETCD-based distributed lock implementation.
https://github.com/g0194776/dlock
distributed-lock distributed-locking etcdv3
Last synced: 27 days ago
JSON representation
ETCD-based distributed lock implementation.
- Host: GitHub
- URL: https://github.com/g0194776/dlock
- Owner: g0194776
- License: apache-2.0
- Created: 2018-12-29T09:05:07.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2019-01-02T06:12:15.000Z (about 7 years ago)
- Last Synced: 2024-06-20T06:29:34.857Z (over 1 year ago)
- Topics: distributed-lock, distributed-locking, etcdv3
- Language: Go
- Size: 16.6 KB
- Stars: 1
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Distributed Lock
## Preface
After considered many of implementations of distributed lock with Golang, I prefered like to write it by myself.
This is an ETCD-based implementation and used v3 protocol for performance enhancement. Simple & Easy, enjoy it!
## How to use it?
#### 1. Start an ETCD instance using Docker container
```shell
docker run -d --name etcd-server \
--publish 2379:2379 \
--publish 2380:2380 \
--env ALLOW_NONE_AUTHENTICATION=yes \
--env ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 \
bitnami/etcd:latest
```
#### 2. Code Sample
```go
dl, err := dlock.NewDistributedLock(DistributedLockOptions{
Key: "/KEY-SPEC-100",
ETCDAddress: "http://127.0.0.1:2379", //accessible ETCD instance.
TTL: 5,
//hook function to receive an event while acquiring the lock.
HoldingLockFunc: func() {
fmt.Println("You are master now...!")
},
//hook function to receive an event while losing the lock.
LosingLockFunc: func() {
fmt.Println("You've lost master role, waiting...")
},
})
if err != nil {
panic(err)
}
dl.TryGetLock()
```