3

我很难与etcd watch客户组合一起工作。

什么有效:我Watchgolang客户端做,我put也在那里做。然后观察寄存器变化。如果我etcdctl以相同的方式使用,即在命令行中同时观看/收听,它也可以工作。

什么不起作用:我从命令行发布并在 go 中观看,反之亦然。

  • 看命令行,放 golang: 不起作用
  • 观看命令行,输入命令行:有效
  • 看golang,输入命令行:不起作用
  • 看 golang,把 golang: 工作

“不起作用”是指未触发观察者。

我正在玩的 Go 代码(你可以像这样运行go run main.go (true|false) (true|false))

package main

import (
    "github.com/coreos/etcd/clientv3"
    "context"
    "time"
    "fmt"
    "os"
)

func main() {
    listen := os.Args[1]
    submit := os.Args[2]
    cfg := clientv3.Config{
        Endpoints: []string{"http://10.0.75.1:2379"},
    }
    c,_ := clientv3.New(cfg)
    if listen == "true" {
        fmt.Println("listening: on")
        ch := c.Watch(context.Background(), "/foo")
        go func() {
            for s := range ch {
                fmt.Println("change: ", string(s.Events[0].Kv.Value))
            }
        }()
    } else {
        fmt.Println("listening: off")
    }
    if submit == "true" {
        fmt.Println("submiting: on")
        go func() {
            for {
                c.Put(context.Background(), "/foo", time.Now().String())
                time.Sleep(1 * time.Second)
            }
        }()
    } else {
        fmt.Println("submiting: off")
    }
    println("waiting 1h")
    time.Sleep(1 * time.Hour)
}

etcdctl我用来发布/观看的命令:

更新:

no_proxy=10.0.75.1 ETCDCTL_API=3 etcdctl.exe --endpoints=http://10.0.75.1:2379 put /foo "$(date)"

手表:

no_proxy=10.0.75.1 ETCDCTL_API=3 etcdctl.exe --endpoints=http://10.0.75.1:2379 watch /foo
4

0 回答 0