diff --git a/core/discov/facade.go b/core/discov/facade.go deleted file mode 100644 index 2a7838f2..00000000 --- a/core/discov/facade.go +++ /dev/null @@ -1,47 +0,0 @@ -package discov - -import ( - "github.com/tal-tech/go-zero/core/discov/internal" - "github.com/tal-tech/go-zero/core/logx" -) - -type ( - Facade struct { - endpoints []string - registry *internal.Registry - } - - FacadeListener interface { - OnAdd(key, val string) - OnDelete(key string) - } -) - -func NewFacade(endpoints []string) Facade { - return Facade{ - endpoints: endpoints, - registry: internal.GetRegistry(), - } -} - -func (f Facade) Client() internal.EtcdClient { - conn, err := f.registry.GetConn(f.endpoints) - logx.Must(err) - return conn -} - -func (f Facade) Monitor(key string, l FacadeListener) { - f.registry.Monitor(f.endpoints, key, listenerAdapter{l}) -} - -type listenerAdapter struct { - l FacadeListener -} - -func (la listenerAdapter) OnAdd(kv internal.KV) { - la.l.OnAdd(kv.Key, kv.Val) -} - -func (la listenerAdapter) OnDelete(kv internal.KV) { - la.l.OnDelete(kv.Key) -} diff --git a/example/etcd/demo/Dockerfile b/example/etcd/demo/Dockerfile deleted file mode 100644 index d4675b85..00000000 --- a/example/etcd/demo/Dockerfile +++ /dev/null @@ -1,27 +0,0 @@ -FROM golang:alpine AS builder - -LABEL stage=gobuilder - -ENV CGO_ENABLED 0 -ENV GOOS linux -ENV GOPROXY https://goproxy.cn,direct - -RUN apk add upx - -WORKDIR $GOPATH/src/zero -COPY . . -RUN go build -ldflags="-s -w" -o /app/etcdmon example/etcd/demo/etcdmon.go -RUN upx -q /app/etcdmon - - -FROM alpine - -RUN apk update --no-cache -RUN apk add --no-cache ca-certificates -RUN apk add --no-cache tzdata -ENV TZ Asia/Shanghai - -WORKDIR /app -COPY --from=builder /app/etcdmon /app/etcdmon - -CMD ["./etcdmon"] diff --git a/example/etcd/demo/etcdmon.go b/example/etcd/demo/etcdmon.go deleted file mode 100644 index 3895b458..00000000 --- a/example/etcd/demo/etcdmon.go +++ /dev/null @@ -1,165 +0,0 @@ -package main - -import ( - "context" - "fmt" - "strings" - "time" - - "github.com/tal-tech/go-zero/core/discov" - "github.com/tal-tech/go-zero/core/logx" - "github.com/tal-tech/go-zero/core/proc" - "github.com/tal-tech/go-zero/core/syncx" - "go.etcd.io/etcd/clientv3" -) - -var ( - endpoints []string - keys = []string{ - "user.rpc", - "classroom.rpc", - } - vals = make(map[string]map[string]string) - barrier syncx.Barrier -) - -type listener struct { - key string -} - -func init() { - cluster := proc.Env("ETCD_CLUSTER") - if len(cluster) > 0 { - endpoints = strings.Split(cluster, ",") - } else { - endpoints = []string{"localhost:2379"} - } -} - -func (l listener) OnAdd(key, val string) { - fmt.Printf("add, key: %s, val: %s\n", key, val) - barrier.Guard(func() { - if m, ok := vals[l.key]; ok { - m[key] = val - } else { - vals[l.key] = map[string]string{key: val} - } - }) -} - -func (l listener) OnDelete(key string) { - fmt.Printf("del, key: %s\n", key) - barrier.Guard(func() { - if m, ok := vals[l.key]; ok { - delete(m, key) - } - }) -} - -func load(cli *clientv3.Client, key string) (map[string]string, error) { - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - resp, err := cli.Get(ctx, key, clientv3.WithPrefix()) - cancel() - if err != nil { - return nil, err - } - - ret := make(map[string]string) - for _, ev := range resp.Kvs { - ret[string(ev.Key)] = string(ev.Value) - } - - return ret, nil -} - -func loadAll(cli *clientv3.Client) (map[string]map[string]string, error) { - ret := make(map[string]map[string]string) - for _, key := range keys { - m, err := load(cli, key) - if err != nil { - return nil, err - } - - ret[key] = m - } - - return ret, nil -} - -func compare(a, b map[string]map[string]string) bool { - if len(a) != len(b) { - return false - } - - for k := range a { - av := a[k] - bv := b[k] - if len(av) != len(bv) { - return false - } - - for kk := range av { - if av[kk] != bv[kk] { - return false - } - } - } - - return true -} - -func serializeMap(m map[string]map[string]string, prefix string) string { - var builder strings.Builder - for k, v := range m { - fmt.Fprintf(&builder, "%s%s:\n", prefix, k) - for kk, vv := range v { - fmt.Fprintf(&builder, "%s\t%s: %s\n", prefix, kk, vv) - } - } - return builder.String() -} - -func main() { - registry := discov.NewFacade(endpoints) - for _, key := range keys { - registry.Monitor(key, listener{key: key}) - } - - ticker := time.NewTicker(time.Minute) - defer ticker.Stop() - - for range ticker.C { - expect, err := loadAll(registry.Client().(*clientv3.Client)) - if err != nil { - fmt.Println("[ETCD-test] can't load current keys") - continue - } - - check := func() bool { - var match bool - barrier.Guard(func() { - match = compare(expect, vals) - }) - if match { - logx.Info("match") - } - return match - } - if check() { - continue - } - - time.AfterFunc(time.Second*5, func() { - if check() { - return - } - - var builder strings.Builder - builder.WriteString(fmt.Sprintf("expect:\n%s\n", serializeMap(expect, "\t"))) - barrier.Guard(func() { - builder.WriteString(fmt.Sprintf("actual:\n%s\n", serializeMap(vals, "\t"))) - }) - fmt.Println(builder.String()) - }) - } -}