etcd v3 客户端使用教程
etcd-clientAn etcd v3 API client项目地址:https://gitcode.com/gh_mirrors/etc/etcd-client
项目介绍
etcd 是一个高可用的键值存储系统,主要用于分布式系统中的服务发现和配置共享。etcd v3 是其最新版本,提供了更强大的功能和更好的性能。本教程基于开源项目 etcd v3 客户端,旨在帮助开发者快速上手并使用 etcd v3 客户端。
项目快速启动
安装依赖
首先,确保你已经安装了 Go 语言环境。然后,通过以下命令安装 etcd v3 客户端:
go get go.etcd.io/etcd/client/v3
创建客户端
以下是一个简单的示例,展示如何创建一个 etcd v3 客户端并连接到 etcd 服务器:
package main
import (
"context"
"fmt"
"time"
"go.etcd.io/etcd/client/v3"
)
func main() {
cfg := clientv3.Config{
Endpoints: []string{"localhost:2379"},
DialTimeout: 5 * time.Second,
}
cli, err := clientv3.New(cfg)
if err != nil {
fmt.Println("连接失败:", err)
return
}
defer cli.Close()
fmt.Println("连接成功")
}
基本操作
以下是一些基本的 etcd v3 客户端操作,包括设置和获取键值对:
package main
import (
"context"
"fmt"
"time"
"go.etcd.io/etcd/client/v3"
)
func main() {
cfg := clientv3.Config{
Endpoints: []string{"localhost:2379"},
DialTimeout: 5 * time.Second,
}
cli, err := clientv3.New(cfg)
if err != nil {
fmt.Println("连接失败:", err)
return
}
defer cli.Close()
// 设置键值对
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
_, err = cli.Put(ctx, "foo", "bar")
cancel()
if err != nil {
fmt.Println("设置键值对失败:", err)
return
}
// 获取键值对
ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)
resp, err := cli.Get(ctx, "foo")
cancel()
if err != nil {
fmt.Println("获取键值对失败:", err)
return
}
for _, ev := range resp.Kvs {
fmt.Printf("%s : %s\n", ev.Key, ev.Value)
}
}
应用案例和最佳实践
服务发现
etcd 常用于服务发现场景。以下是一个简单的服务发现示例:
package main
import (
"context"
"fmt"
"time"
"go.etcd.io/etcd/client/v3"
)
func main() {
cfg := clientv3.Config{
Endpoints: []string{"localhost:2379"},
DialTimeout: 5 * time.Second,
}
cli, err := clientv3.New(cfg)
if err != nil {
fmt.Println("连接失败:", err)
return
}
defer cli.Close()
// 注册服务
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
_, err = cli.Put(ctx, "/services/my-service/instance1", "localhost:8080")
cancel()
if err != nil {
fmt.Println("注册服务失败:", err)
return
}
// 发现服务
ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)
resp, err := cli.Get(ctx, "/services/my-service/", clientv3.WithPrefix())
cancel()
if err != nil {
fmt.Println("发现服务失败:", err)
return
}
for
etcd-clientAn etcd v3 API client项目地址:https://gitcode.com/gh_mirrors/etc/etcd-client