大家好!
欢迎回到 gRPC 课程。在本次讲座中,我们将学习 gRPC 反射以及如何使用 Evans CLI 来使用它。
gRPC 反射是服务器的可选扩展,用于帮助客户端构建请求,而无需事先生成存根。这对于客户端在实际实施之前探索 gRPC API 非常有用。
这是 Youtube](https://www.youtube.com/playlist?list=PLy_6D98if3UJd5hxWNfAqKMr15HZqFnqf)上[完整 gRPC 课程播放列表的链接
Github 存储库:pcbook-go和pcbook-java
Gitlab 存储库:pcbook-go和pcbook-java
在服务器上启用gRPC反射
Golang
让我们首先将 gRPC 反射添加到 Golang 服务器。
reflectionreflection.Register
所以让我们去做吧!
func main() {
...
grpcServer := grpc.NewServer()
pb.RegisterLaptopServiceServer(grpcServer, laptopServer)
reflection.Register(grpcServer)
...
}
进入全屏模式 退出全屏模式
server/main.goreflection.Register
而已!
爪哇
Java 怎么样?
ProtoReflectionService
让我们去 maven 存储库并搜索gRPC service。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--EHumsjtc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/i/ot4ert2fw76slimzixys.png)
build.gradle
...
dependencies {
...
// https://mvnrepository.com/artifact/io.grpc/grpc-services
compile group: 'io.grpc', name: 'grpc-services', version: '1.28.0'
}
...
进入全屏模式 退出全屏模式
LaptopServer.javaProtoReflectionService
...
import io.grpc.protobuf.services.ProtoReflectionService;
public LaptopServer(
ServerBuilder serverBuilder,
int port,
LaptopStore laptopStore,
ImageStore imageStore,
RatingStore ratingStore
) {
this.port = port;
LaptopService laptopService = new LaptopService(laptopStore, imageStore, ratingStore);
server = serverBuilder.addService(laptopService)
.addService(ProtoReflectionService.newInstance())
.build();
}
...
进入全屏模式 退出全屏模式
瞧,服务器上启用了 gRPC 反射。
安装埃文斯客户端
下一步,我们将安装Evans CLI来玩弄服务器反射。
Evans 是一个超级酷的 gRPC 客户端,它允许您在交互式 shell 中构造并向 gRPC 服务器发送请求。
如其Github 页面中所述,有多种安装方法。
brew tapbrew install
brew tap ktr0731/evans
brew install evans
进入全屏模式 退出全屏模式
使用 Evans CLI 和 gRPC 反射
OK Evans 准备好了。现在让我们启动 Golang gRPC 服务器。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--1yzXhVaP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/i/89ad4kcwyes4o56x2344.png)
--reflection
所以我们在终端运行这个命令,传入服务器的8080端口:
evans -r repl -p 8080
进入全屏模式 退出全屏模式
然后我们在 Evans 交互式 shell 中。
显示和描述命令
show packagepackage
[](https://res.cloudinary.com/practicaldev/image/fetch/s--4GfBpXl2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/i/1lc6ii2cjp29velrfeyc.png)
show serviceshow messagedesc
[](https://res.cloudinary.com/practicaldev/image/fetch/s--Za7hhg2X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/i/bnuruxsmbpivttwtjcif.png)
测试创建笔记本RPC
LaptopServiceCreateLaptop
Evans 将要求我们提供数据以构建请求。
-
第一个字段是ID,我们可以留空
-
然后是笔记本电脑品牌,比如说苹果
-
笔记本电脑名称:Macbook Pro
-
CPU品牌:英特尔
-
CPU 名称:让我们使用 Core i9
-
核心数为8
-
线程数为16
-
最小频率为 2.5 GHz
-
最大频率为 4.5 GHz
[](https://res.cloudinary.com/practicaldev/image/fetch/s--uVUgiZ8m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/i/a2j1y77m4re4h595site.png)
- 接下来是 RAM,比如说 32 GB。 Evans 允许我们从列表中选择枚举值。所以用起来很舒服。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--sqJM9kUb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/i/dc6i5fs27us9ggux4s2i.png)
Control D
[](https://res.cloudinary.com/practicaldev/image/fetch/s--bbOYYxxY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/i/ycr1mkeb079kasmpco31.png)
- 下一个字段是存储,也是一个重复字段。假设我们有一个 512 GB 的 SSD 和一个 1 TB 的 HDD。然后控制D停止。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--mMMvC3k5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/i/9dfnxknrbpaadta8zvm6.png)
true
[](https://res.cloudinary.com/practicaldev/image/fetch/s--eg-PsXDo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/i/b2k6lvyiq9nmuozp53ie.png)
现在您可以看到请求已发送到服务器,我们会返回带有创建笔记本电脑 ID 的响应。
测试搜索笔记本RPC
让我们试试 Search Laptop API 看看我们是否可以在服务器上找到那台笔记本电脑。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--KPK17ar4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/i/ap1yiolpsbb64va70znn.png)
-
最高售价4000
-
最小 CPU 核心数为 4
-
最低CPU频率为2.0
-
最小 RAM 为 8 GB。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--j6uw_X76--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/i/wm17ncwd88ttfszvwpiq.png)
酷,笔记本电脑找到了!
所以 gRPC 反射在我们的 Golang 服务器上运行良好。 Java 服务器上的 gRPC 反射将是相同的。如果你愿意,你可以自己尝试。
感谢您的阅读,我们下一篇文章再见!
如果您喜欢这篇文章,请订阅我们的 Youtube 频道和在 Twitter 上关注我们以获取更多教程。
如果您想加入我目前在 Voodoo 的出色团队,请在此处查看我们的职位空缺。远程或现场在巴黎/阿姆斯特丹/伦敦/柏林/巴塞罗那有签证赞助。