gRPC demo 代码生成
概述
在完成了 goctl 安装 后,我们可以通过 goctl 创建一个最小化的 gRPC 服务来了解 goctl 的 go-zero gRPC 服务的概况。
任务目标
- 学会如何使用 goctl 创建一个最小化的 gRPC 服务
- 初步了解 go-zero 的项目结构
- 初步掌握 gRPC 本地调试的方法
准备条件
代码生成
# 创建工作空间并进入该目录
$ mkdir -p ~/workspace/rpc && cd ~/workspace/rpc
# 执行指令生成 demo 服务
$ goctl rpc new demo
Done.
执行完指令后,会在当前目录下生成一个 demo 目录,该目录下包含了一个最小化的 gRPC 服务,我们来查看一下该服务的目录结构。
# 进入 demo 服务目录
$ cd ~/workspace/rpc/demo
# 查看文件列表
$ ls
demo demo.go demo.proto democlient etc go.mod internal
# 查看目录接口
$ tree
.
├── demo
│ ├── demo.pb.go
│ └── demo_grpc.pb.go
├── demo.go
├── demo.proto
├── democlient
│ └── demo.go
├── etc
│ └── demo.yaml
├── go.mod
└── internal
├── config
│ └── config.go
├── logic
│ └── pinglogic.go
├── server
│ └── demoserver.go
└── svc
└── servicecontext.go
注意
API、RPC、Job 服务目录结构大同小异,go-zero 项目结构详情可参阅 《项目结构》
编写简单的逻辑代码
在完成上述代码生成后,我们可以找到 ~/workspace/rpc/demo/internal/logic/pinglogic.go
文件,编辑该文件,将 29
行替换为如下代码:
return &demo.Response{
Pong:"pong",
}, nil
然后把你一下配置文件 ~/workspace/rpc/demo/etc/demo.yaml
,删除 3
至 7
行内容,然后在追加内容 Mode: dev
至末尾,使配置文件内容为:
Name: demo.rpc
ListenOn: 0.0.0.0:8080
Mode: dev
注意
goctl 生成最小化 gRPC 服务默认启动会向 ETCD 注册中心注册当前服务的信息,本次演示就不需要注册中心,所以删除了配置文件中的注册中心配置。
启动服务
在完成上述代码编写后,我们可以通过如下指令启动服务:
# 进入服务目录
$ cd ~/workspace/rpc/demo
# 整理依赖文件
$ go mod tidy
# 启动 go 程序
$ go run demo.go
当你看到有如下输出 Starting rpc server at 0.0.0.0:8080...
,说明服务已经启动成功,接着我们来访问一下该 gRPC 服务。
- grpcurl 访问
- grpcui 访问
- Postman 中访问
$ grpcurl -plaintext 127.0.0.1:8080 demo.Demo/Ping
当你在终端看到如下输出内容时代表你的服务已经成功启动。
{
"pong": "pong"
}
注意
grpcurl 是一个命令行工具,用于访问 gRPC 服务,详情可参阅 《grpcurl》
首先在终端启动 grpcui 服务:
$ grpcui -plaintext 127.0.0.1:8080
然后在浏览器中访问 Ping
接口,当你看到如下输出内容时代表你的服务已经成功启动。
{
"pong": "pong"
}
注意
grpcui 是一个gRPC UI 调试工具,用于访问 gRPC 服务,详情可参阅 《grpcui》
当你在 Postman 中看到如下输出内容时,代表你的服务已经成功启动。
{
"message": "pong"
}
当你按照文档步骤走到这里,恭喜你 🎉 🎉 🎉 ,你已经完成了最简单的 go-zero gRPC 服务的创建和启动了,如需了解 goctl
工具的使用说明请参阅 《CLI 工具》,如需了解完整 go-zero gRPC Server 服务的使用说明请参阅 《gRPC Server》。