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 {} }