// Package etcd ... // // Description : 租约相关操作 // // Author : go_developer@163.com<白茶清欢> // // Date : 2021-11-23 6:03 下午 package etcd import ( "context" "github.com/pkg/errors" "go.etcd.io/etcd/clientv3" ) // LeaseOnce 申请一个一次性租约 // // Author : go_developer@163.com<白茶清欢> // // Date : 6:06 下午 2021/11/23 func LeaseOnce(ctx context.Context, key string, val string, ttl int64) error { if ttl <= 0 { return errors.New("lease time must be more than 0") } if nil == ctx { ctx = context.TODO() } var ( resp *clientv3.LeaseGrantResponse err error ) // 创建一个5秒的租约 if resp, err = Client.Grant(ctx, ttl); err != nil { return errors.New("lease grant error : " + err.Error()) } // ttl 秒钟之后, 这个key就会被移除 if _, err = Client.Put(context.TODO(), key, val, clientv3.WithLease(resp.ID)); err != nil { return errors.New("lease key put fail : " + err.Error()) } return nil }