go语言并发实战——日志收集系统(八) go语言操作etcd以及利用watch实现对键值的监控

有关包的安装

我们要实现go语言对第三方包的操作需要我们下载第三方包go.etcd.io,下载命令:

go get go.etcd.io/etcd/client/v3 

ectd的put与get操作

相关函数说明与示例

我们想实现对etcd进行简单的操作的步骤还是比较简单的,在我上一篇文章中,我们基于命令行实现了客户端对服务端的的put/get操作,步骤主要是以下两步:

  • 打开服务端
  • 客户端连接服务端并完成相关操作
    如果不是很清晰的话可以参考博主上一篇博文:
    go语言并发实战——日志收集系统(七) etcd的介绍与简单使用

而现在我们想实现go语言操作etcd完成get/put操作其实主要也是和商户步骤基本一致:

  • 初始化客户端连接服务端:
cli, err := clientv3.New(clientv3.Config{Endpoints:   []string{"127.0.0.1:2379"}, //服务端通信端口DialTimeout: 5 * time.Second,            //连接超时时间})if err != nil {fmt.Println("init client failed,err:%v", err)return}fmt.Println("init client success!")defer cli.Close()
  • 执行相关操作
    Get函数与Put函数的函数签名为:
Put(ctx context.Context, key, val string, opts ...OpOption) (*PutResponse, error)Get(ctx context.Context, key string, opts ...OpOption) (*GetResponse, error)

我们可以发现它们的参数中存在Context上下文,如果不清楚的话可以参考博主之前的博文:
go语言并发编程(五) ——Context

所以我们可以这样实现get/put操作:

  • get操作:
	//putctx, cancel := context.WithTimeout(context.Background(), time.Second)_, err = cli.Put(ctx, "me", "fengxu")cancel()if err != nil {fmt.Println("put failed,err:%v", err)return}
  • put操作:
//getctx, cancel = context.WithTimeout(context.Background(), time.Second)res, err := cli.Get(ctx, "me")cancel()if err != nil {fmt.Println("get failed,err:%v", err)return}for _, ev := range res.Kvs {fmt.Printf("%s:%s\n", ev.Key, ev.Value)}

完整代码以及结果示例

  • 完整代码:
package mainimport ("context""fmt"clientv3 "go.etcd.io/etcd/client/v3""time"
)func main() {cli, err := clientv3.New(clientv3.Config{Endpoints:   []string{"127.0.0.1:2379"}, //服务端通信端口DialTimeout: 5 * time.Second,            //连接超时时间})if err != nil {fmt.Println("init client failed,err:%v", err)return}fmt.Println("init client success!")defer cli.Close()//putctx, cancel := context.WithTimeout(context.Background(), time.Second)_, err = cli.Put(ctx, "me", "fengxu")cancel()if err != nil {fmt.Println("put failed,err:%v", err)return}//getctx, cancel = context.WithTimeout(context.Background(), time.Second)res, err := cli.Get(ctx, "me")cancel()if err != nil {fmt.Println("get failed,err:%v", err)return}for _, ev := range res.Kvs {fmt.Printf("%s:%s\n", ev.Key, ev.Value)}
}

我们打开服务端,运行代码结果为:
在这里插入图片描述

etcd的watch操作

watch操作的作用

在etcd中,watch操作可以让我们实时完成对键值操作的实时监控。

watch操作函数的实现

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

完整代码及示例

代码:

package mainimport ("context""fmt"clientv3 "go.etcd.io/etcd/client/v3""time"
)func main() {cli, err := clientv3.New(clientv3.Config{Endpoints:   []string{"127.0.0.1:2379"}, //服务端通信端口DialTimeout: 5 * time.Second,            //连接超时时间})if err != nil {fmt.Println("init client failed,err:%v", err)return}fmt.Println("init client success!")defer cli.Close()rch := cli.Watch(context.Background(), "me")for wresp := range rch {for _, ev := range wresp.Events {fmt.Printf("Type:%s Key:%s Value:%s\n", ev.Type, ev.Kv.Key, ev.Kv.Value)}}
}

我们运行该程序,尝试在命令行打开客户端对键值对进行操作:
在这里插入图片描述
运行结果为:
在这里插入图片描述
这样我们就成功实现了watch操作了!

结语

我们有关go简单操作etcd到此为止了,后面就是介绍如何在日志收集服务中使用了,我们下篇见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/644352.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像哈希:全局+局部提取特征

文章信息 作者:梁小平,唐振军期刊:ACM Trans. Multimedia Comput. Commun. Appl(三区)题目:Robust Hashing via Global and Local Invariant Features for Image Copy Detection 目的、实验步骤及结论 目…

python实现钉钉通讯录导出Excel表

Python工具开源专栏 Py0004 python实现钉钉通讯录导出Excel表 Python工具开源专栏前言目录结构部分演示完整代码已在GitHub上开源 前言 需求来源于公司,需要将钉钉通讯录以Excel表的形式导出到本地,方便定期备份。导出的Excel需要处理钉钉用户兼任多部门…

【Kafka】安装配置操作(二)

Kafka安装与操作 安装与配置 版本说明 安装包下载地址: http://archive.apache.org/dist/kafka/3.5.0/ 源码包下载地址: http://archive.apache.org/dist/kafka/3.5.0/ 安装配置 1)解压: tar -zxvf kafka_2.12-3.5.0.tgz -C /opt/module/ 2…

贪心算法-活动安排问题和背包问题

实验6贪心算法-活动安排问题和背包问题 实验目的: 理解贪心算法的基本思想运用贪心算法解决实际问题 实验内容: 采用贪心方法编程实现以下问题的算法 1.如何安排下列活动使得使用的活动场所最少,并给出具体的安排方法。 活动 a b c …

【笔试】03

FLOPS FLOPS 是 Floating Point Operations Per Second 的缩写,意为每秒浮点运算次数。它是衡量计算机性能的指标,特别是用于衡量计算机每秒能够执行多少浮点运算。在高性能计算领域,FLOPS 被广泛用来评估超级计算机、CPU、GPU 和其他处理器…

甘特图是什么?利用甘特图来优化项目管理流程

在现代项目管理中,图表是一种强大而直观的工具,可以帮助项目经理和团队成员清晰地了解并掌控整个项目进程。其中,甘特图是最常用和最有效的图表之一。 甘特图是一种条形图,可以用来直观地展示项目中各个任务的进度、持续时间和相互关系。它由一个横轴和一个纵轴组成。横轴代表时…

2024 OceanBase 开发者大会:OceanBase 4.3正式发布,打造PB级实时分析数据库

4月20日,2024 OceanBase开发者大会盛大召开,吸引了50余位业界知名的数据库专家和爱好者,以及来自全国各地的近600名开发者齐聚一堂。他们围绕一体化、多模、TP与AP融合等前沿技术趋势展开深入讨论,分享场景探索的经验和最佳实践&a…

编程基础“四大件”

基础四大件包括:数据结构和算法,计算机网络,操作系统,设计模式 这跟学什么编程语言,后续从事什么编程方向均无关,只要做编程开发,这四个计算机基础就无法避开。可以这么说,这基础四大件真的比编程语言重要!&#xff0…

typedef 定义函数指针

typdef int(*FUNC_TYPE)(int,int) FUNC_TYPE p NULL; 定义了一个函数指针 函数指针作为函数的参数的用法demon

基于python+django+mysql农业生产可视化系统

博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…

I2C,UART,SPI(STM32、51单片机)

目录 基本理论知识: 并行通信/串行通信: 异步通信/同步通信: 半双工通信/全双工通信: UART串口: I2C串口: SPI串口: I2C在单片机中的应用: 软件模拟: 51单片机:…

投票刷礼物链接怎么弄?最新投票活动创建系统源码 轻松创建活动

投票刷礼物链接怎么弄?投票活动创建系统的作用和功能多种多样,为用户提供一个便捷、高效且功能强大的平台,用于创建、管理和执行各种投票活动。分享一个最新投票活动创建系统源码,源码开源可二开,含完整代码包和详细搭…