package app import ( "context" "joybuywork/internal/config" "time" "go.etcd.io/etcd/api/v3/mvccpb" clientv3 "go.etcd.io/etcd/client/v3" ) const ( EtcdPrefix = "/joybuywork" EtcdConfig = EtcdPrefix + "/config" ) var EtcdCli *clientv3.Client func InitEtcdCli() (err error) { EtcdCli, err = clientv3.New(clientv3.Config{ Endpoints: config.Config.Etcd.Address, DialTimeout: 10 * time.Second, }) if err != nil { return } watch() return } func watch() { GoSafe(func() { for { data, ok := <-EtcdCli.Watch(context.Background(), EtcdConfig, clientv3.WithPrefix(), clientv3.WithPrevKV()) if !ok || data.Canceled { FeishuNormalSend("etcd 退出了, 数据 %+v, 错误:%v", data, ok) return } for _, ev := range data.Events { switch ev.Type { case mvccpb.PUT: switch string(ev.Kv.Key) { case EtcdConfig + "/ads": err := AdsInit(string(ev.Kv.Value)) FeishuNormalSend("重制广告配置[%s],错误:%v", string(ev.Kv.Value), err) } } } } }) }