etcd中用lease租约实现过期
生活随笔
收集整理的這篇文章主要介紹了
etcd中用lease租约实现过期
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
etcd中用lease租約實現過期。
簡單紀錄一下在etcd中利用lease實現kv過期的功能。
其實思路很簡單:
1.申請一個lease,且給這個租約設置一個ttl,比如設置這個ttl為1秒。
2.然后將這個lease與kv的操作關聯起來,那么1s后這個就過期了。
需要注意的是:
1.centos里的端口要放開。
代碼如下:
/*
author='du'
date='2020/5/28 7:17'
*/
package main
import (
"context"
"fmt"
"github.com/coreos/etcd/clientv3"
"time"
)
func main() {
var (
client *clientv3.Client
lease clientv3.Lease
leaseGrantResp *clientv3.LeaseGrantResponse
leaseId clientv3.LeaseID
kv clientv3.KV
putResp *clientv3.PutResponse
getResp *clientv3.GetResponse
)
//客戶端配置
config := clientv3.Config{
Endpoints: []string{"129.211.78.6:2379"},
DialTimeout: 5 * time.Second,
}
//建立連接
client, err := clientv3.New(config)
if err != nil {
fmt.Printf("連接失敗:%s", err)
return
}
//申請一個租約
lease = clientv3.NewLease(client)
//申請一個5s的租約。
if leaseGrantResp, err = lease.Grant(context.TODO(), 5); err != nil {
fmt.Println(err)
return
}
leaseId = leaseGrantResp.ID
//獲取kv,然后Put kv,將之和租約關聯起來,實現過期的效果
kv = clientv3.KV(client)
if putResp, err = kv.Put(context.TODO(), "/cron/lock/job1", "", clientv3.WithLease(leaseId)); err != nil {
return
}
fmt.Println("寫入成功,當前revision是:", putResp.Header.Revision)
//模擬數據,每1s去get一下數據,看5s后數據有無過期
for {
if getResp, err = kv.Get(context.TODO(), "/cron/lock/job1"); err != nil {
fmt.Println(err)
return
}
if getResp.Count == 0 {
fmt.Println("未獲取到數據,已經過期了。")
break
}
fmt.Println("還木有過期,當前數據", getResp.Kvs)
time.Sleep(1 * time.Second)
}
}
由代碼,我們可以看到設置了一個5s的ttl,那么看一下效果吧:
總結
以上是生活随笔為你收集整理的etcd中用lease租约实现过期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WMS、WCS、PLC、AGV
- 下一篇: CentOS7时间设置问题