0. 概述

在之前的 Protobuf 工具篇:玩转 Protobuf 中我介绍了一种可以作为客户端的 protobuf 工具,但是,今天我要介绍另外一款不太一样工具,它可以查看 GRPC 服务中的方法,并且也可以在命令行中调用这个方法。

这个工具名字为 grpcurl,是一个非官方的工具,它的用途正如其名,就是让你可以想 http 一样使用 curl 来调用和调是 GRPC,在这篇文章中,我将向你展示一下,如何使用这个项目和工具。

1. 环境准备

要想使用 grpccurl,第一步肯定是要先安装啦,因为我是使用 Go 环境的,所以可以直接用 go install 安装,如果你使用其他环境,可以从 Release 中下载。

  1. [[email protected].io]# go get github.com/fullstorydev/grpcurl
  2. [[email protected].io]# go install github.com/fullstorydev/grpcurl/cmd/grpcurl

当工具安装完之后,在尝试使用之前,我们得先有个 GRPC 服务,所以你可以从我的示例中获取:代码下载,然后运行起来:

  1. [[email protected].io]# git clone https://github.com/liqiangblogdemos/grpc-sample.git
  2. [[email protected].io]# cd grpc-sample
  3. [[email protected].io]# go run server/main.go
  4. Listen at localhost:8123

现在就已经运行起了一个 GRPC Server 了,接着就可以使用 grpccurl 工具了。默认得,grpccurl 是使用 TLS 的,如果你想使用普通的 tcp 连接,那么得加上参数 --plaintext,所以后面你都会看到这个参数。

2. 查看元数据

第一个 grpccurl 的演示功能就是如何查看所有的服务:

  1. [[email protected].io]# grpcurl -plaintext localhost:8123 list
  2. TestService
  3. grpc.reflection.v1alpha.ServerReflection

可以看到,通过 list 子命令可以查看到服务器中暴露出来的服务,需要注意的是,默认的 grpc 服务器是不能使用这条命令的,需要在代码中额外加上一行代码:

  1. [[email protected].io]# cat main.go
  2. ... ...
  3. reflection.Register(s)
  4. ... ...

这样你才能让 grpccurl 识别到你的服务。接着我要演示一下如何查看服务里面的方法:

  1. [[email protected].io]# grpcurl -plaintext localhost:8123 list TestService
  2. TestService.GetFiles
  3. TestService.Ping

可以看到,直接在 list 子命令中加上对应的服务名,就可以看到对应的服务提供什么方法,既然方法可以知道,那么在调用它之前得知道它得参数和返回值组成之类的,所以还需要再继续看详情:

  1. [[email protected].io]# grpcurl -plaintext localhost:8123 describe TestService.Ping
  2. TestService.Ping is a method:
  3. rpc Ping ( .google.protobuf.Empty ) returns ( .google.protobuf.Empty );

OK,这样就在不查看 proto 的情况下把一个服务的底细给摸清楚了。

3. 命令调用

下一步,就是尝试用命令行调用一个 GRPC 方法了:

  1. [[email protected].io]# grpcurl -plaintext localhost:8123 TestService/Ping
  2. {
  3. }

OK,一切正常,如果你想要传递参数的话(当然,这个例子里面没有参数),你需要加上 -d 参数,例如这样:

  1. [[email protected].io]# grpcurl -plaintext -d '{"value": {"author": "https://liqiang.io"}}' localhost:8123 TestService/Ping

但是,在这个例子里,这里无意义。

4. 小结

在这篇文章中,我介绍了 grpccurl 这个工具的环境准备,以及如何安装这个工具,如何用这个工具获取 GRPC 服务的元数据,还有如何通过命令行去调用它。

5. Ref