玩一玩 golang 之 etcd 基础操作

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)
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/q282176713/article/details/81177545