在前面几篇关于gRPC的文章中,我们已经实现了简单的gRPC接口,但是这些接口都是本地调用,这在现实生产环境中几乎不可能。在生产环境中,除非是直直接在固定ip的物理机/虚拟机上运行,否则ip地址是不固定的,而且服务的数量也是不固定的,这时候就需要服务注册与发现了。
在微服务架构中,服务的注册与发现是一个非常重要的组件,它可以让服务之间的调用更加简单,也可以让服务更加健壮。服务注册发现中间件有很多,比如etcd、consul、zookeeper等,这里我们选择consul。
在本章中,我们将实现如下功能:
-
服务端启动时,将服务注册到consul中,并实现健康检查接口。 -
客户端通过consul发现服务,获取服务列表,并根据从consul获取到的信息,调用服务。
本文示例环境及版本信息:
-
操作系统:macOS。 -
Go版本:1.21.4。
准备工作
在开始之前,我们需要先安装consul。本机是mac,直接使用brew安装:
brew install consul
可以如下命令启动或停止consul:
# 启动consul
brew services start consul
# 停止consul
brew services stop consul
成功启动consul后,在浏览器中访问http://localhost:8500/ui/,可以看到consul的web界面,如下图所示:
![alt](https://i-blog.csdnimg.cn/blog_migrate/48a8234b7d04068548c27f21bc3c2250.png)
更多信息,大家可以访问consul官方网站查看:https://developer.hashicorp.com/consul/docs/install。
服务端开发
为了方便,我们新建一个目录,复制之前gRPC系列之一-Unary模式中的代码,在其基础上进行开发。
下面,我们讲解一下主要逻辑:
初始化consul客户端
我们新建一个pkg目录,用于存放一些中间件代码,在pkg目录下新建consul/consul.go文件,内容如下: