携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情
本文向大家推荐两个好用的grpc调试工具,BloomRPC和gRPCurl。主要包括使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
我们在开发rpc服务时,如果不被api服务调用,则无法调试,那有没有一个工具像postman一样直接调试gRpc的接口呢, 所以我们要想直接调试gRpc的接口,答案肯定是有的,就是本文要介绍的BloomRpc和gRPCurl。两者都可以用于调试gRPC服务。
BloomRPC
BloomRPC是图形化的 gRPC 开发和测试工具。由于http测试有postman工具,在使用GRPC框架的时候,我们使用BloomRPC工具。
安装
下载地址
bloomRpc下载地址:github.com/bloomrpc/bl…
从地址下载选择你需要对应的版本。
windows安装
下载exe可执行文件,双击下一步即可。
macos安装
brew install --cask bloomrpc
复制代码
使用
1、打开BloomRPC,看到如下界面
2、导入proto文件
3、执行
选择一个接口,自动会添加测试参数,输入IP和端口号,确保服务器已经启动,不然无法连接,查看结果
\
gRPCurl
除了使用BloomRPC工具,我们还可以使用类似curl这样的,直接通过终端,在命令行发起请求。
gRPCurl用于从命令行调用gRPC服务器支持的RPC方法,gRPC使用二进制编码(protobuf), 不能利用常规的curl工具(早期的curl版本还不支持HTTP/2)。
grpcurl 安装
macos
brew install grpcurl
复制代码
Docker
# Download image
docker pull fullstorydev/grpcurl:latest
# Run the tool
docker run fullstorydev/grpcurl api.grpc.me:443 list
复制代码
go tool
go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest
复制代码
grpcurl 使用
在使用 grpcurl
时,需要通过 -cert
和 -key
参数设置公钥和私钥文件,表示链接启用了 TLS
协议的服务。
对于没有启用 TLS
协议的 gRPC
服务,通过 -plaintext
参数忽略 TLS
证书的验证过程。
如果是 Unix Socket
协议,则需要指定 -unix
参数。
服务注册
func main() {
server := grpc.NewServer()
// 注册 grpcurl 所需的 reflection 服务
reflection.Register(server)
//注册
helloworldPb.RegisterHelloworldServer(server, new(Helloworld))
lis, err := net.Listen("tcp", ":9000")
if err != nil {
panic(err.Error())
}
server.Serve(lis)
}
复制代码
reflection.Register(server)
这行代码很重要,一定要包含,不然会报没有启动reflection
反射服务。 Failed to list services: server does not support the reflection API
查看某个服务的方法列表
grpcurl -plaintext 127.0.0.1:9000 list
复制代码
查看某个服务的方法列表
grpcurl -plaintext 127.0.0.1:9000 list helloworld.Helloworld
复制代码
查看方法定义
grpcurl -plaintext 127.0.0.1:9000 describe helloworld.Helloworld.GetData
复制代码
查看请求参数
grpcurl -plaintext 127.0.0.1:9000 describe helloworld.ReqData
复制代码
请求服务
grpcurl -d '{"name": "test"}' -plaintext 127.0.0.1:9000 helloworld.Helloworld.GetData
复制代码
-d 参数后面也可以跟 @,表示从标准输入读取 json 参数,一般用于输入比较复杂的 json 数据,也可以用于测试流方法。
grpcurl -d @ -plaintext 127.0.0.1:9000 helloworld.Helloworld.GetData
复制代码