Nats-mutex is a distributed lock library using NATS.
go get github.com/jokruger/nats-mutex
Process 1
...
m, _ := natsmutex.NewSyncMutex(
natsmutex.WithUrl("nats://localhost:4222"),
natsmutex.WithResourceID("123"),
)
m.Lock()
fmt.Println("Process 1 is in critical section")
time.Sleep(10 * time.Second)
m.Unlock()
...
Process 2
...
m, _ := natsmutex.NewSyncMutex(
natsmutex.WithUrl("nats://localhost:4222"),
natsmutex.WithResourceID("123"),
)
m.Lock()
fmt.Println("Process 2 is in critical section")
time.Sleep(10 * time.Second)
m.Unlock()
...
For more examples and betchmarks refer to https://github.com/jokruger/distributed-lock-benchmark