etcd做注冊服務使用 類似java生態(tài)的zookeeper换途,最近在學學習
1童太、下載etcd包
//直接下載即可(因為包比較大有翻墻写穴,可以直接去 https://golangtc.com/download/package 下載)
go get go.etcd.io/etcd/clientv3
2币喧、使用記錄
packge main
import (
"context"
"fmt"
"go.etcd.io/etcd/clientv3"
//"log/syslog"
"time"
)
func main() {
var (
config clientv3.Config
client *clientv3.Client
err error
kv clientv3.KV
putResp *clientv3.PutResponse
getResp *clientv3.GetResponse
delResp *clientv3.DeleteResponse
keepResp *clientv3.LeaseKeepAliveResponse
keepRespChan <-chan *clientv3.LeaseKeepAliveResponse
)
}
//客戶端配置
config = clientv3.Config{
Endpoints:[]string{"127.0.0.1:2379"},
DialTimeout:5 * time.Second,
}
//建立連接
if client,err = clientv3.New(config);err != nil {
fmt.Println(err)
return
}
//得到操作etcd鍵值對的kv
kv = clientv3.NewKV(client)
//寫入etcd
if putResp,err = kv.Put(context.TODO(),"/cron/jobs/job2","....",clientv3.WithPrevKV()/*可選參數(shù)淮逊,得到上次操作的值*/);err != nil {
fmt.Println(err)
} else {
fmt.Println(putResp.Header.Revision)
if putResp.PrevKv != nil {
fmt.Println(string(putResp.PrevKv.Value))
}
}
//讀取某個key的value值
getResp,err = kv.Get(context.TODO(),"/cron/jobs/job1"/*,clientv3.WithCountOnly()可選參數(shù),得到數(shù)量*/)
if err != nil {
fmt.Println(err)
return
} else {
fmt.Println(getResp.Kvs[0].Value/*得到的是一個切片*/)
}
//讀取前綴為XXX的所有的key的value(需要加上參數(shù)clientv3.WithPrefix())
if getResp,err = kv.Get(context.TODO(),"/cron/jobs/",clientv3.WithPrefix());err != nil {
fmt.Println(err)
return
} else {
fmt.Println(getResp.Kvs)
}
//刪除操作
if delResp,err = kv.Delete(context.TODO(),"/cron/jobs/job2",clientv3.WithPrevKV()/*得到刪除之前的值*/);err != nil {
fmt.Println(err)
return
} else {
if len(delResp.PrevKvs) != 0 {
fmt.Println(delResp.PrevKvs)
}
}