Etcd смотреть разных клиентов

Я борюсь с получением etcdwatch работа с комбинацией клиентов.

Что работает: я делаю Watchв golang клиент и я put также там. Затем следите за изменением регистра. Если я использую etcdctl таким же образом, т.е. смотреть / слушать как в командной строке, это также работает.

Что не работает: я публикую из командной строки и смотрю в го или наоборот.

  • смотреть командную строку, ставить голанг: не работает
  • смотреть командную строку, ставить командную строку: работает
  • смотреть голанг, ставить командную строку: не работает
  • смотреть голанг, ставить голанг: работает

Я не имею в виду, что наблюдатель не срабатывает.

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

0 ответов

Другие вопросы по тегам