发布者

  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "log"
  6. "time"
  7. "github.com/tal-tech/go-zero/core/discov"
  8. )
  9. /*
  10. 函数flag.StringVar接受 4 个参数
  11. 第 1 个参数是用于存储该命令参数值的地址,具体到这里就是在前面声明的变量name的地址了,由表达式&name表示。
  12. 第 2 个参数是为了指定该命令参数的名称,这里是name。
  13. 第 3 个参数是为了指定在未追加该命令参数时的默认值,这里是everyone。
  14. 至于第 4 个函数参数,即是该命令参数的简短说明了,这在打印命令说明时会用到。
  15. go run .\pub.go -v=EdcdTest
  16. */
  17. var value = flag.String("v", "value", "the value")
  18. func main() {
  19. flag.Parse()
  20. client := discov.NewPublisher([]string{"127.0.0.1:2379"}, "028F2C35852D", *value)
  21. if err := client.KeepAlive(); err != nil {
  22. log.Fatal(err)
  23. }
  24. defer client.Stop()
  25. for {
  26. time.Sleep(time.Second)
  27. fmt.Println(*value)
  28. }
  29. }
  1. PS D:\Projects\Github\NoobWu\zero-examples\etcd\pub> go run .\pub.go -v=EdcdTest

image.png

订阅

  1. package main
  2. import (
  3. "fmt"
  4. "time"
  5. "github.com/tal-tech/go-zero/core/discov"
  6. "github.com/tal-tech/go-zero/core/logx"
  7. )
  8. func main() {
  9. sub, err := discov.NewSubscriber([]string{"127.0.0.1:2379"}, "028F2C35852D", discov.Exclusive())
  10. logx.Must(err)
  11. ticker := time.NewTicker(time.Second * 3)
  12. defer ticker.Stop()
  13. for {
  14. select {
  15. case <-ticker.C:
  16. fmt.Println("values:", sub.Values())
  17. }
  18. }
  19. }
  1. PS D:\Projects\Github\NoobWu\zero-examples\etcd\sub> go run .\sub.go

image.png
image.png
image.png

原文链接

https://github.com/zeromicro/zero-examples/tree/main/etcd

d