gitee.com/h79/goutils@v1.22.10/discovery/consul/base.go (about) 1 package consul 2 3 import ( 4 "fmt" 5 "gitee.com/h79/goutils/common/logger" 6 "gitee.com/h79/goutils/common/result" 7 "gitee.com/h79/goutils/discovery/config" 8 "gitee.com/h79/goutils/discovery/service" 9 consul "github.com/hashicorp/consul/api" 10 ) 11 12 type Base struct { 13 client *consul.Client 14 watcher *Watcher 15 } 16 17 func (base *Base) kvSet(data service.Data) error { 18 if base.client == nil { 19 return fmt.Errorf("client is null, error") 20 } 21 if data.Path == "" || data.Service == "" { 22 return fmt.Errorf("data error: %v", data) 23 } 24 kv := &consul.KVPair{ 25 Key: data.ToKey(), 26 Flags: 0, 27 Value: []byte(data.Value)} 28 29 _, err := base.client.KV().Put(kv, nil) 30 return err 31 } 32 33 func (base *Base) kvGet(key service.Key) ([]*service.Data, error) { 34 if base.client == nil { 35 return nil, fmt.Errorf("client is null, error") 36 } 37 kv, _, err := base.client.KV().Get(key.ToKey(), nil) 38 if err != nil { 39 return nil, err 40 } 41 var kvs []*service.Data 42 kvs = append(kvs, &service.Data{ 43 Key: service.NewKey(kv.Key), 44 Value: string(kv.Value), 45 }) 46 47 return kvs, nil 48 } 49 50 // Set interface 51 func (base *Base) Set(data service.Data) error { 52 53 if err := base.kvSet(data); err != nil { 54 logger.Error("Consul.build: set data, err= %+v", err) 55 return err 56 } 57 return nil 58 } 59 60 // Get interface 61 func (base *Base) Get(key service.Key) ([]*service.Data, error) { 62 kvs, err := base.kvGet(key) 63 if err != nil { 64 logger.Error("Consul.build: get data, err= %+v", err) 65 return nil, err 66 } 67 return kvs, nil 68 } 69 70 func (base *Base) AttachWatcher(watcher *Watcher) { 71 base.watcher = watcher 72 } 73 74 func NewClientWithPoints(eps config.EndPoints) (*consul.Client, error) { 75 eps.Servers.ToWeight() 76 for _, addr := range eps.Servers.Array() { 77 cfg := consul.DefaultConfig() 78 cfg.Address = addr //host:port 79 client, err := consul.NewClient(cfg) 80 if err == nil { 81 return client, nil 82 } 83 } 84 return nil, result.Error(result.ErrServiceInternal, 85 fmt.Sprintf("CONSUL.CLIENT: create consul client failure")) 86 }