etcd的安装
下载源码, 编译运行
git clone https://github.com/coreos/etcd.git
$ cd etcd
$ ./build
$ ./bin/etcd
测试etcd
设置值
$ ETCDCTL_API=3 ./bin/etcdctl put foo bar
OK
获取值
$ ETCDCTL_API=3 ./bin/etcdctl get foo
foo
bar
下载go第三方库
go get github.com/coreos/etcd/clientv3
设置值与获取值
package main
import (
"context"
"fmt"
"github.com/coreos/etcd/clientv3"
"time"
)
func main() {
cli, err := clientv3.New(clientv3.Config{
Endpoints: []string{"localhost:2379", "localhost:22379", "localhost:32379"},
DialTimeout: 5 * time.Second,
})
if err != nil {
fmt.Println("connect failed, err:", err)
return
}
fmt.Println("connect succ")
defer cli.Close()
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
_, err = cli.Put(ctx, "/logagent/conf/", "sample_value")
cancel()
if err != nil {
fmt.Println("put failed, err:", err)
return
}
ctx, cancel = context.WithTimeout(context.Background(), time.Second)
resp, err := cli.Get(ctx, "/logagent/conf/")
cancel()
if err != nil {
fmt.Println("get failed, err:", err)
return
}
for _, ev := range resp.Kvs {
fmt.Printf("%s : %s\n", ev.Key, ev.Value)
}
}
watch操作
package main
import (
etcd_client "github.com/coreos/etcd/clientv3"
"time"
"fmt"
"context"
)
func main() {
client, err := etcd_client.New(etcd_client.Config{
Endpoints: []string{"localhost:2379", "localhost:22379", "localhost:32379"},
DialTimeout: 5 * time.Second,
})
if err != nil {
fmt.Printf("connect failed ,err ", err)
return
}
defer client.Close()
background := context.Background()
client.Put(background, "/logagent/conf/", "123456")
if err != nil {
fmt.Println("err :", err)
return
}
fmt.Println("connec success !!")
for {
watch := client.Watch(context.Background(), "/logagent/conf/")
for wresp := range watch {
for _, v := range wresp.Events {
fmt.Printf("%s %q : %q \n", v.Type,v.Kv.Key,v.Kv.Value)
}
}
}
}