从 0 到 1,十分钟搭建一个微服务集群,集群由一个 rpc 网关和多个微服务组成
以一个简单的电商微服务集群为例,商品详情页面有商品信息、库存信息、商品评价信息,这些信息数据分散在不同的微服务中,通过 rpc 网关服务组装所需的数据返回给商品详情页面,如下图所示:
已经提前准备好 4 个 proto 文件,每个 proto 文件生成对应一个服务代码:
comment.proto 文件定义的 rpc 方法是通过产品 id 获取评论数据,用来生成评论 rpc 服务代码。
inventory.proto 文件定义的 rpc 方法是通过产品 id 获取库存数据,用来生成库存 rpc 服务代码。
product.proto 文件定义的 rpc 方法是通过产品 id 获取详情数据,用来生成商品 rpc 服务代码。
shopgw.proto 文件定义的 rpc 方法是根据产品 id 组装成商品详情页面所需的数据,用来生成 shop rpc 网关服务代码。
<br>
接下来使用工具 sponge 生成 4 个服务代码,并运行起来。
十分钟搭建一个微服务集群的详细演示过程请看 B 站视频 https://www.bilibili.com/video/BV1YM4y127YK/
<br>
安装 sponge 地址:https://github.com/zhufuyi/sponge
安装完 sponge 后,执行命令打开 UI 界面:
<br>
快速生成和启动评论、库存、产品三个微服务
生成评论、库存、产品三个微服务代码
进入 sponge 的 UI 界面,点击左边菜单栏【protobuf】--> 【RPC 类型】-->【创建 rpc 项目】,填写评论、库存、产品各自参数,分别生成评论、库存、商品服务代码。
微服务框架使用 grpc,还包含了常用的服务治理功能代码,构建部署脚本等,使用什么数据库由自己选择。
快速创建评论(comment)服务如下图所示:
<br>
快速创建库存(inventory)服务如下图所示:
<br>
快速创建产品(product)服务如下图所示:
<br>
打开三个终端,评论、库存、产品分别对应一个终端。
启动评论(comment)服务
切换到评论(comment)目录,执行步骤:
(1) 生成 pb.go 代码,生成模板代码,生成测试代码
(2) 打开 internal/service/comment.go,这是生成的模板代码,里面有一行提示填写业务逻辑代码的 panic 代码,在这里填写业务逻辑,例如填写返回值:
(3) 打开 configs/comment.yml 配置文件,找到 grpc,修改下面的 port 和 httpPort 两个端口值
(4) 编译和启动 comment 服务
<br>
启动库存(inventory)服务
切换到库存(inventory)目录,执行和 comment 一样的步骤:
(1) 生成 pb.go 代码,生成模板代码,生成测试代码
(2) 打开 internal/service/inventory.go,这是生成的模板代码,里面有一行提示填写业务逻辑代码的 panic 代码,在这里填写业务逻辑,例如填写返回值:
(3) 打开 configs/inventory.yml 配置文件,找到 grpc,修改下面的 port 和 httpPort 两个端口值
(4) 编译和启动 inventory 服务
<br>
启动产品(product)服务
切换到库存(product)目录,执行和 comment 一样的步骤:
(1) 生成 pb.go 代码,生成模板代码,生成测试代码
(2) 打开 internal/service/product.go,这是生成的模板代码,里面有一行提示填写业务逻辑代码的 panic 代码,在这里填写业务逻辑,例如填写返回值:
(3) 打开 configs/product.yml 配置文件,找到 grpc,修改下面的 port 和 httpPort 两个端口值
(4) 编译和启动 product 服务
评论、库存、产品三个微服务都启动成功后,接下来就可以生成和启动网关服务了。
<br>
快速生成和启动 rpc 网关服务
进入 sponge 的 UI 界面,点击左边菜单栏【protobuf】--> 【Web 类型】-->【创建 rpc 网关项目】,填写一些参数就可以生成 rpc 网关项目代码了。
web 框架使用 gin,还包含了 swagger 文档、常用的服务治理功能代码,构建部署脚本等。
为了连接评论、库存、产品三个 rpc 服务,需要另外生成连接 rpc 服务代码,点击左边菜单栏【Public】--> 【生成连接 rpc 服务代码】,填写参数后生成代码,然后把生成的连接 rpc 服务代码移动到 rpc 网关项目代码目录下。
在 rpc 网关服务中为了能够调用 rpc 服务的方法,需要把评论、库存、产品三个 rpc 服务的 proto 文件复制到 rpc 网关服务的目录api/shopgw/v1
下。
切换到 shopgw 目录,执行步骤:
(1) 生成 pb.go 代码,生成注册路由代码,生成模板代码,生成 swagger 文档
(2) 打开 internal/service/shopgw_logic.go,这是生成的 api 接口代码,在这里填写业务逻辑代码,填写下面简单业务逻辑代码:
(3) 打开 configs/shopgw.yml 配置文件,找到 grpcClient,添加评论、库存、产品三个 rpc 服务地址:
(4) 编译和启动 shopgw 服务
在浏览器打开 http://localhost:8080/apis/swagger/index.html 就可以测试 api 接口了。
<br>
总结
使用工具 sponge 很容易就搭建出一个微服务集群,集群中各个微服务的常用服务治理功能也是具备的,例如服务注册与发现、限流、熔断、链路跟踪、监控、性能分析、资源统计、CICD 等,这些功能统一在 yml 配置文件开启或关闭。只要在 proto 文件定义好 rpc 方法的描述信息,后续的开发基本都是在生成的模板代码填写业务逻辑代码,在生成的测试代码中验证业务逻辑,使得开发简单化,提高开发效率,节省开发时间。
<br>
这是根据上面步骤生成的完整源码: https://wwzy.lanzoub.com/ilA0m0rz6z9i
评论