etcd租約及監聽key

bytemode · · 107 次點擊 · · 開始瀏覽    
etcd中kv存儲已經租約和監聽的基本使.都說源碼之下了無秘密,就不打字了. ``` package 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("%v\n", putResp.Header) time.Sleep(10 * time.Second) //撤銷租約 _, err = lease.Revoke(context.TODO(), leaseID) if err != nil { log.Fatalf("撤銷租約失敗:%s\n", 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) } ```

入群交流(和以上內容無關):Go中文網 QQ 交流群:729884609 或加微信入微信群:274768166 備注:入群;關注公眾號:Go語言中文網

107 次點擊  ?  1 贊  
加入收藏 微博
上一篇:etcd快速入門
暫無回復
添加一條新回復 (您需要 登錄 后才能回復 沒有賬號 ?)
  • 請盡量讓自己的回復能夠對別人有幫助
  • 支持 Markdown 格式, **粗體**、~~刪除線~~、`單行代碼`
  • 支持 @ 本站用戶;支持表情(輸入 : 提示),見 Emoji cheat sheet
  • 圖片支持拖拽、截圖粘貼等方式上傳