test.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. package main
  2. import (
  3. "context"
  4. "go.etcd.io/etcd/client/v3"
  5. "time"
  6. )
  7. //func main() {
  8. // var (
  9. // client *clientv3.Client
  10. // config clientv3.Config
  11. // err error
  12. // )
  13. //
  14. // config = clientv3.Config{
  15. // // 这里的 Endpoints 是一个字符串数组切片,支持配合多个节点
  16. // Endpoints: []string{"106.54.33.152:2379"},
  17. // // DialTimeout 连接超时设置
  18. // DialTimeout: time.Duration(5) * time.Millisecond,
  19. // }
  20. // if client, err = clientv3.New(config); err != nil {
  21. // return
  22. // }
  23. // kv := client.KV
  24. // ctx := context.Background()
  25. // c := map[string]interface{}{
  26. // "id": 3,
  27. // "name": "demo",
  28. // "age": 30,
  29. // }
  30. // data, _ := json.Marshal(c)
  31. //
  32. // var s = "/hstack/nodes/"
  33. // var nodes = []string{
  34. // "1.1.1.1",
  35. // "2.2.2.2",
  36. // "3.3.3.3",
  37. // }
  38. //
  39. // for _, node := range nodes {
  40. // newnodeKey := fmt.Sprintf("%s%s", s, node)
  41. // kv.Put(ctx, newnodeKey, string(data))
  42. // }
  43. //
  44. // get, err := kv.Get(ctx, s, clientv3.WithPrefix())
  45. // if err != nil {
  46. // return
  47. // }
  48. //
  49. // for _, kv := range get.Kvs {
  50. // after, _ := strings.CutPrefix(string(kv.Key), s)
  51. // fmt.Printf("%s : %s\n", after, string(kv.Value))
  52. // }
  53. //}
  54. //
  55. func main() {
  56. cli, err := clientv3.New(clientv3.Config{
  57. Endpoints: []string{"106.54.33.152:2379"},
  58. DialTimeout: 5 * time.Second,
  59. })
  60. if err != nil {
  61. panic(err)
  62. }
  63. defer cli.Close()
  64. _, _ = cli.Delete(context.Background(), "/hstack/server/nodes", clientv3.WithPrefix())
  65. }
  66. //// 保持租约
  67. //func keepAlive(cli *clientv3.Client, leaseID clientv3.LeaseID) {
  68. // alive, err := cli.KeepAlive(ctx, leaseID)
  69. // if err != nil {
  70. // fmt.Printf("Failed to keep alive: %v\n", err)
  71. // return
  72. // }
  73. // //监听KeepAlive的响应
  74. // go func() {
  75. // for {
  76. // ka := <-alive
  77. // if ka == nil {
  78. // log.Println("租约已失效或KeepAlive通道已关闭")
  79. // return
  80. // }
  81. // log.Printf("续租成功: %v\n", ka)
  82. // }
  83. // }()
  84. //}
  85. //
  86. //// 新增键值对
  87. //func put(cli *clientv3.Client, key, value string) error {
  88. // _, err := cli.Put(ctx, key, value)
  89. // if err != nil {
  90. // log.Fatal(err)
  91. // return err
  92. // }
  93. // return nil
  94. //}
  95. //
  96. //// 新增键值对,带有过期时间
  97. //func putWithTTL(cli *clientv3.Client, key, value string, ttl int64) (int64, error) {
  98. // leaseResp, err := cli.Grant(ctx, ttl)
  99. // if err != nil {
  100. // log.Fatal(err)
  101. // return 0, err
  102. // }
  103. // _, err = cli.Put(ctx, key, value, clientv3.WithLease(leaseResp.ID))
  104. // if err != nil {
  105. // log.Fatal(err)
  106. // return 0, err
  107. // }
  108. // return int64(leaseResp.ID), nil
  109. //}
  110. //
  111. //// 监听键值变化
  112. //func watch(cli *clientv3.Client, key string) {
  113. //
  114. // watchCh := cli.Watch(ctx, key, clientv3.WithPrefix())
  115. //
  116. // go func() {
  117. //
  118. // for event := range watchCh {
  119. // if event.Err() != nil {
  120. // fmt.Printf("Failed to watch: %v\n", event.Err())
  121. // return
  122. // }
  123. // if len(event.Events) == 0 {
  124. // fmt.Println("No events")
  125. // return
  126. // }
  127. // fmt.Printf("Event: %s %q : %q\n", event.Events[0].Type, event.Events[0].Kv.Key, event.Events[0].Kv.Value)
  128. // if event.Events[0].Type == clientv3.EventTypeDelete {
  129. // fmt.Println("删除")
  130. // fmt.Printf(" %v\n", event.Events[0])
  131. // }
  132. // }
  133. // }()
  134. //}
  135. //
  136. //// 获取键的值
  137. //func get(cli *clientv3.Client, key string) (string, error) {
  138. // resp, err := cli.Get(ctx, key)
  139. // if err != nil {
  140. // log.Fatal(err)
  141. // return "", err
  142. // }
  143. // if resp.Count == 0 {
  144. // return "", fmt.Errorf("key %s not found", key)
  145. // }
  146. // return string(resp.Kvs[0].Value), nil
  147. //}
  148. //
  149. //// 获取当前前缀下所有的键并截取前缀
  150. //func getAndCutPrefix(cli *clientv3.Client, prefix string) ([]string, error) {
  151. // resp, err := cli.Get(ctx, prefix, clientv3.WithPrefix())
  152. // if err != nil {
  153. // log.Fatal(err)
  154. // return nil, err
  155. // }
  156. // keys := make([]string, 0)
  157. // for _, kv := range resp.Kvs {
  158. // keys = append(keys, strings.TrimPrefix(string(kv.Key), prefix))
  159. // }
  160. // return keys, nil
  161. //}