复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103package main import ( "context" "log" "time" "go.etcd.io/etcd/clientv3" ) func main() { var conf = clientv3.Config{ Endpoints: []string{"127.0.0.1:2380"}, DialTimeout: 5 * time.Second, } //创建clinetv3 client, err := clientv3.New(conf) defer client.Close() if err != nil { log.Fatal(err.Error()) } //创建租约 lease := clientv3.NewLease(client) //设置租约时间 leaseResp, err := lease.Grant(context.TODO(), 30) if err != nil { log.Fatal(err.Error()) } //设置续租 leaseID := leaseResp.ID ctx, _ := context.WithCancel(context.TODO()) leaseRespChan, err := lease.KeepAlive(ctx, leaseID) if err != nil { log.Fatal(err.Error()) //设置续租失败 续期之后向leaseRespChan通知 } //监听租约 go func() { for { select { case resp := <-leaseRespChan: if resp == nil { log.Println("租约已经到期关闭") goto LEASE_OVER } else { log.Println("续租成功") goto END } } LEASE_OVER: log.Println("lease 监听结束") break END: time.Sleep(500 * time.Millisecond) } }() //监听某个key的变化 //ctx1, _ := context.WithTimeout(context.TODO(),20) go func() { wc := client.Watch(context.TODO(), "/job/v3/1", clientv3.WithPrevKV()) //创建监听 for v := range wc { //range 监听事件 for _, e := range v.Events { log.Printf("type:%v kv:%v prevKey:%v n ", e.Type, string(e.Kv.Key), e.PrevKv) } } }() //key授权租约 kv := clientv3.NewKV(client) //通过租约put putResp, err := kv.Put(context.TODO(), "/job/v3/1", "koock", clientv3.WithLease(leaseID)) if err != nil { log.Printf("put 失败:%s", err.Error()) } log.Printf("%vn", putResp.Header) time.Sleep(10 * time.Second) //撤销租约 _, err = lease.Revoke(context.TODO(), leaseID) if err != nil { log.Fatalf("撤销租约失败:%sn", err.Error()) } log.Println("撤销租约成功") //cancelFunc() //查询key getResp, err := kv.Get(context.TODO(), "/job/v3/1") if err != nil { log.Fatalf("get 失败:%s", err.Error()) } log.Printf("%v", getResp.Kvs) time.Sleep(20 * time.Second) }
最后
以上就是英勇花卷最近收集整理的关于etcd租约及监听key的全部内容,更多相关etcd租约及监听key内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复