GO-操作etcd简单示例
go操作etcd
etcd是使用Go语言开发的一个开源的、高可用的分布式key-value存储系统,可以用于配置共享和服务的注册和发现。
创建测试项目
- 创建项目
go mod init goetcd
- 下载go依赖库sarama
go get go.etcd.io/etcd/clientv3
注意事项
- 在windows平台上下载安装clientv3出错(因grpc v1.27.0+版本的google.golang.org/grpc包不支持etcdv3引起的)
解决办法修改依赖版本
#修改依赖
go mod edit -require=google.golang.org/grpc@v1.26.0
或在go.mod里加上
replace google.golang.org/grpc => google.golang.org/grpc v1.26.0
操作
put和get操作
put
命令用来设置键值对数据,get
命令用来根据key获取值。
package main
import (
"context"
"crypto/tls"
"crypto/x509"
"fmt"
"io/ioutil"
"time"
"go.etcd.io/etcd/clientv3"
)
var (
dialTimeout = 5 * time.Second
requestTimeout = 4 * time.Second
endpoints = []string{"https://192.168.10.190:2379", "https://192.168.10.191:2379", "https://192.168.10.192:2379"}
etcdCert = "etcd.pem"
etcdCertKey = "etcd-key.pem"
etcdCa = "ca.pem"
)
func main() {
// 创建连接-TLS
cert, err := tls.LoadX509KeyPair(etcdCert, etcdCertKey)
if err != nil {
fmt.Printf("cert failed, err:%v
", err)
return
}
caData, err := ioutil.ReadFile(etcdCa)
if err != nil {
return
}
pool := x509.NewCertPool()
pool.AppendCertsFromPEM(caData)
_tlsConfig := &tls.Config{
Certificates: []tls.Certificate{cert},
RootCAs: pool,
}
cfg := clientv3.Config{
Endpoints: endpoints,
DialTimeout: dialTimeout,
TLS: _tlsConfig,
}
cli, err := clientv3.New(cfg)
if err != nil {
// handle error
fmt.Printf("connect to etcd failed, err:%v
", err)
return
}
fmt.Println("connect to etcd success")
defer cli.Close()
// put
ctx, cancel := context.WithTimeout(context.Background(), requestTimeout)
_, err = cli.Put(ctx, "标", "hello")
cancel()
if err != nil {
fmt.Printf("put to etcd failed, err:%v
", err)
return
}
// get
ctx, cancel = context.WithTimeout(context.Background(), requestTimeout)
resp, err := cli.Get(ctx, "标")
cancel()
if err != nil {
fmt.Printf("get from etcd failed, err:%v
", err)
return
}
for _, kv := range resp.Kvs {
fmt.Printf("%s:%s
", kv.Key, kv.Value)
}
}
- 运行结果