Copyright © 2022-2025 aizws.net · 网站版本: v1.2.6·内部版本: v1.25.2·
页面加载耗时 0.00 毫秒·物理内存 130.9MB ·虚拟内存 1372.6MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
etcd 是一个分布式、高可用的一致性键值存储系统,提供可靠的分布式键值存储、配置共享和服务发现等功能。
用程序访问etcd首先要创建client,它需要传入一个Config配置,这里传了2个选项:
config := clientv3.Config{
Endpoints: []string{"127.0.0.1:2379"},
DialTimeout: 5 * time.Second,
}
package main
import (
"context"
"github.com/coreos/etcd/clientv3"
"github.com/coreos/etcd/mvcc/mvccpb"
"log"
"time"
)
func main() {
// 客户端配置
config := clientv3.Config{
Endpoints: []string{"127.0.0.1:2379"},
DialTimeout: 5 * time.Second,
}
// 建立连接
client, err := clientv3.New(config)
if err != nil {
log.Println(err)
return
}
defer client.Close()
// 检测状态
timeoutCtx,_ := context.WithTimeout(context.Background(), 2 * time.Second)
_, err = client.Status(timeoutCtx, config.Endpoints[0])
if err != nil {
log.Println(err)
return
}
// 设置KV
putResp, err := client.Put(timeoutCtx, "/test", "put value")
if err != nil {
log.Println(err)
return
}
log.Printf("设置成功,原值为:%v\n", putResp.PrevKv)
// 查询KV
getResp, err := client.Get(timeoutCtx, "/test")
if err != nil {
log.Println(err)
return
}
log.Printf("查询成功,所有键值为:%v\n", getResp.Kvs)
// 模拟KV变化
go func() {
for {
client.Put(timeoutCtx, "/test", "put value")
client.Delete(timeoutCtx, "/test")
time.Sleep(1 * time.Second)
}
}()
// 创建监控
watchChan := clientv3.NewWatcher(client).Watch(timeoutCtx, "/test")
// 处理KV事件
for watchResp := range watchChan {
for _, event := range watchResp.Events {
switch event.Type {
case mvccpb.PUT:
log.Println("修改:", string(event.Kv.Value))
case mvccpb.DELETE:
log.Println("删除:", string(event.Kv.Key))
}
}
}
}
如果编译中出现以下问题:
# github.com/coreos/etcd/clientv3/balancer/resolver/endpoint ../../go/pkg/mod/github.com/coreos/etcd@v3.3.27+incompatible/clientv3/balancer/resolver/endpoint/endpoint.go:114:78: undefined: resolver.BuildOption ../../go/pkg/mod/github.com/coreos/etcd@v3.3.27+incompatible/clientv3/balancer/resolver/endpoint/endpoint.go:182:31: undefined: resolver.ResolveNowOption # github.com/coreos/etcd/clientv3/balancer/picker ../../go/pkg/mod/github.com/coreos/etcd@v3.3.27+incompatible/clientv3/balancer/picker/err.go:37:44: undefined: balancer.PickOptions ../../go/pkg/mod/github.com/coreos/etcd@v3.3.27+incompatible/clientv3/balancer/picker/roundrobin_balanced.go:55:54: undefined: balancer.PickOptions
可以在 mod 文件中添加以下内容:
replace google.golang.org/grpc => google.golang.org/grpc v1.26.0
etcd是使用Go语言开发的一个开源的、高可用的分布式key-value存储系统,可以用于配置共享和服务的注册和发现。类似项目有zookeeper和consul。etcd具有以下特点:完全复制:集群中的每个节点都 ...