注意, github.com/coreos/etcd/clientv3 中使用了grpc,但是grpc高版本不支持这个库了,可以将高版本的grpc替换成低版本
在go.mod中添加
replace google.golang.org/grpc => google.golang.org/grpc v1.26.0
实现一个简单的租约操作,代码如下
package main
import (
"context"
"fmt"
"github.com/coreos/etcd/clientv3"
"go_assembly/etcd_assembly/conn"
)
func main() {
cli := conn.ConnEtcd()
ctx := context.Background()
grandResp, erR := cli.Lease.Grant(ctx, 10)
if erR != nil {
fmt.Println("租约创建失败")
return
}
_, err := cli.Put(ctx, "/test/geant", "租约开始了", clientv3.WithLease(grandResp.ID))
if err != nil {
fmt.Println("创建key的租约失败")
return
}
for {
// 查看租约信息
res, err := cli.Lease.TimeToLive(ctx, grandResp.ID)
if err != nil {
fmt.Println("租约信息查看失败")
return
}
fmt.Println("剩余时间:", res.TTL)
// 如果租约时间只有1秒的时候开始续约
if res.TTL == 1 {
alive, err := cli.Lease.KeepAlive(ctx, grandResp.ID)
if err != nil {
return
}
select {
case res := <-alive:
fmt.Println("时间", res.TTL)
}
}
}
}
```