写点什么

[ CloudWeGo 微服务实践 - 05 ] 服务注册(1)

用户头像
baiyutang
关注
发布于: 16 小时前
[ CloudWeGo 微服务实践 - 05 ] 服务注册(1)

按照官方文档的介绍 CloudWeGo 的服务注册是自定义扩展的,只需要实现接口,在 NewServer 时,传入相关 options 参数即可。


在正式引入服务注册之前,我们要确定怎么做注册发现,我们实践来讲,先用一下常规方案:etcd 搞一下。今天的的实践时间也主要在 etcd 安装上面。

目标

  1. etcd 安装配置好。

  2. 实现 Kitex 的服务注册接口。(下一节才能做)

环境

  1. MacOS Monterey 12.0.1

Etcd


说起 etcd,想起之前和同事讨论问题,同事说“etcd 是中心化的存储...”,说的我好怀疑人生,难道不是分布式的?难道记得 Raft 选举算法不是在这里?


这里我们暂且不谈 etcd 的优越性,把焦点放在各个中间件如何组装成微服务网格。今天先把 etcd 给安排上,作为我们下一节的注册中心。


安装

直接参考 etcd 官网的下载与构建,而这里我们使用 Homebrew 安装

brew install etcd
复制代码



效果

etcdctl version
复制代码


启动

brew services start etcd
复制代码


验证

写数据

etcdctl put foo bar
复制代码


读数据

etcdctl get foo
复制代码



引入 etcd

现在尝试在我们的项目中引入 etcd,我们可以直接在文档中找到官方库


或直接在 GitHub 中找到 >> https://github.com/etcd-io/etcd/tree/main/client/v3



下载依赖

go get go.etcd.io/etcd/client/v3
复制代码



创建 etcd 连接

把如下代码放入 main 函数

	// etcd	cli, err := clientv3.New(clientv3.Config{		Endpoints:   []string{"localhost:2379", "localhost:22379", "localhost:32379"},		DialTimeout: 5 * time.Second,	})	if err != nil {		log.Fatalf("failed connect etcd: %v", err)	}	defer cli.Close()
复制代码

尝试启动服务,我们发现能够正常启动,并且无异常日志


读取 etcd 数据

建立连接之后,我们再尝试获取数据,看是否和我们刚刚直接在终端获取的数据一致:

	// 尝试读取测试数据	rsp, err := cli.Get(context.Background(), "foo")	log.Printf("cli.Get:%v,%v", rsp.Kvs, err)
复制代码


整体代码如下:


再次尝试启动服务:

我们可以看到第一行已经打印了我们的日志

2021/11/05 01:17:25 cli.Get:[key:"foo" create_revision:2 mod_revision:2 version:1 value:"bar" ],<nil>
复制代码


并且和我们在终端获取的数据对比,发现是一致的:


以上,是引入 etcd,下节我们再实现接口,尝试做我们的注册中心。晚安。

发布于: 16 小时前阅读数: 9
用户头像

baiyutang

关注

广州 2017.12.13 加入

Microservices | Golang | Cloud Nitive | “Smart work,Not hard”

评论

发布
暂无评论
[ CloudWeGo 微服务实践 - 05 ] 服务注册(1)