Go Client Watch etcd событие не удалось - PullRequest
0 голосов
/ 27 октября 2019

Когда я использую клиент etcd go.etcd.io/etcd/clientv3 для просмотра события etcd, я обнаружил, что получу много ответов с пустыми событиями. Журнал ниже:

ime = "2019-10-27T20: 39: 13 + 08: 00 "level = debug msg =" Ответ наблюдения ETCD: {Header: {ClusterId: 0 MemberId: 0 Редакция: 0 RaftTerm: 0} События: [] CompactRevision: 0 Отменено: false Создано: falsecloseErr: cancelReason:} "file =" backend.go: 135 "time =" 2019-10-27T20: 39: 13 + 08: 00 "level = debug msg =" Ответ наблюдения ETCD: {Header: {ClusterId: 0 MemberId: 0 Редакция: 0 RaftTerm: 0} События: [] CompactRevision: 0 Отменено: false Создано: false closeErr: cancelReason:} "file =" backend.go: 135 "time =" 2019-10-27T20: 39: 13+08:00 "level = debug msg =" Ответ наблюдения ETCD: {Header: {ClusterId: 0 MemberId: 0 Редакция: 0 RaftTerm: 0} События: [] CompactRevision: 0 Отменено: false Создано: false closeErr: cancelReason:} "file = "backend.go: 135" time = "2019-10-27T20: 39: 13 + 08: 00" level = debug msg = "Ответ наблюдения ETCD: {Header: {ClusterId: 0 MemberId: 0 Редакция: 0 RaftTerm: 0} События: [] CompactRevision: 0 Отменено: false Создано: false closeErr: cancelReason:} "file =" backend.go: 135 "time =" 2019-10-27T20: 39: 13 + 08: 00 "level = debug msg =" Ответ ETCD watch: {Header: {ClusterId: 0 MemberId: 0 Редакция: 0 RaftTerm: 0} События: [] CompactRevision: 0 Отменено: false Создано: false closeErr: cancelReason:} "file =" backend.go: 135 "time =" 2019-10-27T20: 39: 13 + 08: 00 "level = debug msg =" Ответ наблюдения ETCD: {Header: {ClusterId: 0 MemberId: 0 Редакция: 0 RaftTerm: 0} События: [] CompactRevision: 0 Отменено: falseСоздано: false closeErr: cancelReason:} "file =" backend.go: 135 "time =" 2019-10-27T20: 39: 13 + 08: 00 "level = debug msg =" Ответ просмотра ETCD: {Header: {ClusterId: 0 MemberId: 0 Редакция: 0 RaftTerm: 0} События: [] CompactRevision: 0 Отменено: false Создано: false closeErr: cancelReason:} "file =" backend.go: 135 "time =" 2019-10-27T20: 39: 13 + 08: 00 "level = debug msg =" Ответ отслеживания ETCD: {Header: {ClusterId: 0 MemberId: 0 Редакция: 0 RaftTerm: 0} События: [] CompactRevision: 0 Отменено: false Создано: false closeErr: cancelReason:} "file =" backend.go: 135 "

подсказки: backend.go: 135 is: fmt.Printf ("% v ", соответственно), ответ получен от watchChan

   func (e *EtcdClient) watchWithOptions(ctx context.Context, key string, opts ...clientv3.OpOption) clientv3.WatchChan {
    if e.client == nil {
        return nil
    }

    key = e.withPrefix(key)

    return e.client.Watch(ctx, key, opts...)
}

// WatchPrefix watch the kvs change with same prefix
func (e *EtcdClient) WatchPrefix(ctx context.Context, prefix string) clientv3.WatchChan {
    return e.watchWithOptions(ctx, prefix, clientv3.WithPrefix(), clientv3.WithPrevKV())
}

iисключены события put, delete, но фактический вывод недопустим пустые события

1 Ответ

0 голосов
/ 28 октября 2019
package main

import (
    "context"
    "fmt"
    "time"

    clientv3 "go.etcd.io/etcd/clientv3"
)

func main() {
    cli, err := clientv3.New(clientv3.Config{
        Endpoints:   []string{"localhost:2379", "localhost:22379", "localhost:32379"},
        DialTimeout: 5 * time.Second,
    })
    if err != nil {
        // handle error!
    }
    defer cli.Close()
    ctx := context.Background()
    rch := cli.Watch(ctx, "foo")
    for wresp := range rch {
        for _, ev := range wresp.Events {
            fmt.Printf("%s %q : %q\n", ev.Type, ev.Kv.Key, ev.Kv.Value)
        }
    }
}

watch using etcdctl

Если вы еще не видели, посмотрите пример из документа

Комудальше отлаживать, ты не против поделиться своим кодом?

...