1、啓動ETCD
@echo off
etcd.exe --config-file etcd.conf.yml
pause
etcd.conf.yml
name: etcd
listen-client-urls: http://0.0.0.0:2379
advertise-client-urls: http://0.0.0.0:2379
2、編寫客戶端:
package main
import (
"context"
"fmt"
"github.com/coreos/etcd/clientv3"
"log"
"time"
)
var (
dialTimout = 5*time.Second
requestTimeout = 10*time.Second
endpoints = []string{"127.0.0.1:2379",}
)
func main() {
cli, err := clientv3.New(clientv3.Config{
Endpoints: endpoints,
DialTimeout: dialTimout,
})
if err != nil {
log.Fatal(err)
fmt.Printf("connect to etcd failed, err:%v\n", err);
return
}
defer cli.Close()
//子線程中去修改
go func() {
//Put
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
putresp, err := cli.Put(ctx, "testdir/testkey", "hello_etcd")
cancel()
if err != nil {
fmt.Printf("put to etcd failed, err:%v\n", err)
return
}
fmt.Println(putresp)
//Get
ctx, cancel = context.WithTimeout(context.Background(), time.Second)
resp, err := cli.Get(ctx, "testdir/testkey")
cancel()
if err != nil {
fmt.Printf("get from etcd failed, err:%v\n", err)
return
}
for _, ev := range resp.Kvs {
fmt.Printf("%s:%s\n", ev.Key, ev.Value)
}
//Del
ctx, cancel = context.WithTimeout(context.Background(), time.Second)
delresp, err := cli.Delete(ctx, "testdir/testkey")
cancel()
if err != nil {
fmt.Printf("delete from etcd failed, err:%v\n", err)
return
}
fmt.Println(delresp)
}()
//Watch
fmt.Println("watch begin...")
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
wchan := cli.Watch(ctx,"testdir/testkey")
for wresp := range wchan {
for _, ev := range wresp.Events{
fmt.Printf("watch: %s %q:%q\n", ev.Type, ev.Kv.Key, ev.Kv.Value)
}
}
fmt.Println("watch end...")
cancel()
}
3、查看結果;
watch begin...
watch: PUT "testdir/testkey":"hello_etcd"
&{cluster_id:14841639068965178418 member_id:10276657743932975437 revision:27 raft_term:4 <nil>}
testdir/testkey:hello_etcd
&{cluster_id:14841639068965178418 member_id:10276657743932975437 revision:28 raft_term:4 1 []}
watch: DELETE "testdir/testkey":""
watch end...
Process finished with exit code 0