使用golang连接并简单使用ETCD

ETCD简介

etcd(读作 et-see-dee)是一种开源的分布式统一键值存储,用于分布式系统或计算机集群的共享配置、服务发现和的调度协调。etcd 有助于促进更加安全的自动更新,协调向主机调度的工作,并帮助设置容器的覆盖网络。

etcd 是许多其他项目的核心组件。最值得注意的是,它是 Kubernetes 的首要数据存储,也是容器编排的实际标准系统。使用 etcd, 云原生应用可以保持更为一致的运行时间,而且在个别服务器发生故障时也能正常工作。应用从 etcd 读取数据并写入到其中;通过分散配置数据,为节点配置提供冗余和弹性。

下载并启动ETCD

下载链接
启动单机版本,命令行运行etcd.exe即可
在这里插入图片描述

使用go连接ETCD

package main


import (
	"context"
	"fmt"
	"go.etcd.io/etcd/clientv3"
	"time"
)
// 代码连接etcd

func main(){
	cli, err := clientv3.New(clientv3.Config{
		Endpoints: []string{"127.0.0.1:2379"},
		DialTimeout:time.Second*5,
	})
	if err != nil {
		fmt.Printf("---------connect to etcd failed, err:%v", err)
		return
	}
	defer cli.Close()

默认端口2379

使用PUT写数据,GET读数据

	// put
	ctx, cancel := context.WithTimeout(context.Background(), time.Second)
	str := `[{"path":"D:/learn/go/log-collector-lmh/log_agent_etcd/log_file/log1","topic":"log1"},{"path":"D:/learn/go/log-collector-lmh/log_agent_etcd/log_file/log2","topic":"log2"}]`
	k:="etcd_collect_key"
	_, err = cli.Put(ctx, k, str)
	if err != nil {
		fmt.Printf("put to etcd failed, err:%v", err)
		return
	}
	cancel()

	// get
	ctx, cancel = context.WithTimeout(context.Background(), time.Second)
	gr, err := cli.Get(ctx, k)
	if err != nil {
		fmt.Printf("-------get from etcd failed, err:%v", err)
		return
	}
	for _, ev := range gr.Kvs{
		fmt.Printf("------key:%s value:%s/n", ev.Key, ev.Value)
	}
	cancel()

在这里插入图片描述

使用Watch监控ETCD中键值变化

package main

import (
	"context"
	"fmt"
	"go.etcd.io/etcd/clientv3"
	"time"
)

// watch

func main(){
	cli, err := clientv3.New(clientv3.Config{
		Endpoints: []string{"127.0.0.1:2379"},
		DialTimeout:time.Second*5,
	})
	if err != nil {
		fmt.Printf("connect to etcd failed, err:%v", err)
		return
	}
	defer cli.Close()

	// watch
	watchCh := cli.Watch(context.Background(), "etcd_collect_key")

	for wresp := range watchCh{
		for _, evt := range wresp.Events{
			fmt.Printf("type:%s key:%s value:%s\n", evt.Type, evt.Kv.Key, evt.Kv.Value)
		}
	}
}

当etcd中的etcd_collect_key值变化时(修改,删除)时,会监控到。

你可能感兴趣的:(GO,golang,etcd,开发语言)