Files
reconnect/examples/etcd_example.go

74 lines
1.5 KiB
Go

package main
import (
"context"
"fmt"
"log"
"time"
clientv3 "go.etcd.io/etcd/client/v3"
"github.com/blueocean-go/reconnect"
)
func main() {
// etcd配置
etcdConfig := clientv3.Config{
Endpoints: []string{"localhost:2379"},
DialTimeout: 5 * time.Second,
}
// 创建重连配置
config := reconnect.DefaultConfig()
config.RetryInterval = 3 * time.Second
config.MaxRetries = 0 // 无限重试
config.OnReconnect = func() {
fmt.Println("etcd重连成功!")
}
config.OnDisconnect = func(err error) {
fmt.Printf("etcd连接断开: %v\n", err)
}
// 创建重连管理器
manager := reconnect.EtcdManager(etcdConfig, config)
// 启动连接
ctx := context.Background()
if err := manager.Start(ctx); err != nil {
log.Fatalf("启动失败: %v", err)
}
defer manager.Stop()
// 获取etcd客户端并使用
etcdClient := reconnect.NewEtcdClient(etcdConfig)
if err := etcdClient.Connect(ctx); err != nil {
log.Fatalf("连接失败: %v", err)
}
client := etcdClient.GetClient()
if client == nil {
log.Fatal("客户端为空")
}
// 使用etcd客户端
kv := clientv3.NewKV(client)
_, err := kv.Put(ctx, "key", "value")
if err != nil {
log.Printf("设置键值失败: %v", err)
} else {
fmt.Println("设置键值成功")
}
resp, err := kv.Get(ctx, "key")
if err != nil {
log.Printf("获取键值失败: %v", err)
} else {
if len(resp.Kvs) > 0 {
fmt.Printf("获取键值: %s = %s\n", resp.Kvs[0].Key, resp.Kvs[0].Value)
}
}
// 保持运行
select {}
}