| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- package main
- import (
- "context"
- "fmt"
- "go.etcd.io/etcd/client/v3"
- "time"
- )
- func main() {
- cli, err := clientv3.New(clientv3.Config{
- Endpoints: []string{"192.168.1.7:2379"},
- DialTimeout: 5 * time.Second,
- })
- if err != nil {
- // handle error!
- fmt.Printf("connect to etcd failed, err:%v\n", err)
- return
- }
- fmt.Println("connect to etcd success")
- defer cli.Close()
- // put
- ctx, cancel := context.WithTimeout(context.Background(), time.Second)
- _, err = cli.Put(ctx, "name", "shuaimei")
- cancel()
- if err != nil {
- fmt.Printf("put to etcd failed, err:%v\n", err)
- return
- }
- // get
- ctx, cancel = context.WithTimeout(context.Background(), time.Second)
- resp, err := cli.Get(ctx, "name")
- cancel()
- if err != nil {
- fmt.Printf("get from etcd failed, err:%v\n", err)
- return
- }
- for _, ev := range resp.Kvs {
- fmt.Printf("%s:%s\n", ev.Key, ev.Value)
- }
- //申请租约 Grant()
- var leaseGrantResp *clientv3.LeaseGrantResponse
- lease := clientv3.NewLease(cli)
- if leaseGrantResp, err = lease.Grant(context.TODO(), 10); err != nil {
- fmt.Println(err)
- return
- }
- leaseId := leaseGrantResp.ID
- // 获得kv API子集
- kv := clientv3.NewKV(cli)
- if _, err = kv.Put(context.TODO(), "/school/class/students", "h", clientv3.WithLease(leaseId)); err != nil {
- fmt.Println(err)
- return
- }
- //for {
- // var getResp *clientv3.GetResponse
- // if getResp, err = kv.Get(context.TODO(), "/school/class/students"); err != nil {
- // fmt.Println(err)
- // return
- // }
- // if getResp.Count == 0 {
- // fmt.Println("kv过期了")
- // break
- // }
- // fmt.Println("还没过期:", getResp.Kvs)
- // time.Sleep(2 * time.Second)
- //}
- //自动续租 KeepAlive()
- var keepRespChan <-chan *clientv3.LeaseKeepAliveResponse
- fmt.Println(leaseId)
- if keepRespChan, err = lease.KeepAlive(context.TODO(), leaseId); err != nil {
- fmt.Println(err)
- return
- }
- go func() {
- for {
- select {
- case keepResp := <- keepRespChan:
- if keepRespChan == nil {
- fmt.Println("租约已经失效了")
- goto END
- } else { // 每秒会续租一次, 所以就会受到一次应答
- fmt.Println("收到自动续租应答:", keepResp.ID)
- }
- }
- }
- END:
- }()
- }
|