etcd组件学习1:租约续约的简单实现

174 阅读1分钟

注意, 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)
         }

      }

   }

}
```