etcd -- go语言操作
服务注册发现的过程
etcd由哪几部分构成?
etcd作为一个高可用的键值存储系统,天生就是为了集群化而设计的,一般etcd推荐奇数个节点,推荐的节点数量是 3
、5
、7
构成一个集群。
启动etcd
安装完 etcd
以后,使用 go
进行连接
连接 etcd
复制import (
"context"
"fmt"
"time"
"go.etcd.io/etcd/clientv3"
)
func main() {
// 连接etcd
cli, err := clientv3.New(clientv3.Config{
Endpoints: []string{"127.0.0.1:2379"},
DialTimeout: 5 * time.Second, //超时时间
})
if err != nil {
fmt.Println("connect to etcd failed ,err ", err)
return
}
defer cli.Close()
// put
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
_, err = cli.Put(ctx, "s4", "真好")
if err != nil {
fmt.Println("put to etcd faild err:", err)
return
}
cancel() //写完关闭
// get
ctx, cancel = context.WithTimeout(context.Background(), time.Second)
gr, err := cli.Get(ctx, "s4")
if err != nil {
fmt.Println("Get from etcd faild err:", err)
return
}
for _, ev := range gr.Kvs {
fmt.Println("从etcd中读取成功")
fmt.Printf("key:%s,value :%s", ev.Key, ev.Value)
}
cancel() //写完关闭
}
watch
用来监控etcd中key的变化(创建,更改,删除)
import (
"context"
"fmt"
"time"
"go.etcd.io/etcd/clientv3"
)
func main() {
// 连接etcd
cli, err := clientv3.New(clientv3.Config{
Endpoints: []string{"127.0.0.1:2379"},
DialTimeout: 5 * time.Second, //超时时间
})
if err != nil {
fmt.Println("connect to etcd failed ,err ", err)
return
}
fmt.Println("etcd 连接成功......")
defer cli.Close()
// watch
watchChan := cli.Watch(context.Background(), "s4")
for wresp := range watchChan { //如果通道里面没有值得话,就会一直在这里阻塞
for _, evt := range wresp.Events {
fmt.Printf("watch 事件,type:%s , key:%s , value: %s\n", evt.Type, evt.Kv.Key, evt.Kv.Value)
}
}
}
测试 watch
使用 etcd
的客户端进行测试
etcdctl put s4 "liudehua"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?