golang基础-etcd介绍与使用、etcd存取值、etcd监测数据写入

golang基础-etcd介绍与使用、etcd存取值、etcd监测数据写入

来自: Saflyer

原文:https://blog.csdn.net/u013210620/article/details/78608988

etcd介绍与使用

概念:高可用的分布式key-value存储,可以用于配置共享和服务发现。 
类似项目:zookeeper和consul 
开发语言:Go 
接口:提供restful的http接口,使用简单 
实现算法:基于raft算法的强一致性、高可用的服务存储目录

etcd搭建 
a. 下载etcd release版本:https://github.com/coreos/etcd/releases/ 
b. ./bin/etcd即可以启动etcd 
c. 使用etcdctl工具更改配置

这里写图片描述

etcd测试链接

package main

import (
    "fmt"
    "github.com/coreos/etcd/clientv3"
    "time"
)

func main() {
    /*
        DialTimeout time.Duration `json:"dial-timeout"`
        Endpoints []string `json:"endpoints"`
    */
    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()
}

输出如下:

PS E:\golang\go_pro\src\safly> go run main.go
connect succ
PS E:\golang\go_pro\src\safly>

etcd存取值

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()
    //设置1秒超时,访问etcd有超时控制
    ctx, cancel := context.WithTimeout(context.Background(), time.Second)
    //操作etcd
    _, err = cli.Put(ctx, "/logagent/conf/", "sample_value")
    //操作完毕,取消etcd
    cancel()
    if err != nil {
        fmt.Println("put failed, err:", err)
        return
    }
    //取值,设置超时为1秒
    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)
    }
}

输出如下:

PS E:\golang\go_pro\src\safly> go run example.go
connect succ
/logagent/conf/ : sample_value

etcd检测Watch

package main

import (
    "context"
    "fmt"
    "time"

    "github.com/coreos/etcd/clientv3"
)

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

    cli.Put(context.Background(), "/logagent/conf/", "8888888")
    for {
        rch := cli.Watch(context.Background(), "/logagent/conf/")
        for wresp := range rch {
            for _, ev := range wresp.Events {
                fmt.Printf("%s %q : %q\n", ev.Type, ev.Kv.Key, ev.Kv.Value)
            }
        }
    }
}

这里写图片描述

猜你喜欢

转载自blog.csdn.net/kenkao/article/details/84327120