packagemainimport("fmt"etcd"go.etcd.io/etcd/client/v3""go.etcd.io/etcd/client/v3/concurrency""time")var(cli*etcd.Client)funcService()error{session,err:=concurrency.NewSession(cli)iferr!=nil{returnerr}locker:=concurrency.NewLocker(session,"Id:1")locker.Lock()deferlocker.Unlock()// do any thing...
// 模拟耗时任务
time.Sleep(time.Second)fmt.Println("?")returnnil}funcmain(){varerrerrorcli,err=etcd.New(etcd.Config{Endpoints:[]string{"192.168.80.128:2379"},DialTimeout:5*time.Second,})iferr!=nil{panic(err)}varch=make(chanint,1)fori:=0;i<30;i++{goService()}<-ch}