1、编写proto
2、启动服务
/**
* @Author: zhangsan
* @Description:
* @File: main
* @Version: 1.0.0
* @Date: 2021/5/10 下午5:04
*/
package main
import (
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
"log"
"net"
servers "test/grpcurl/server"
server "test/grpcurl/src"
)
func main(){
grpcServe := grpc.NewServer()
//注册grpcurl服务,否则报错
reflection.Register(grpcServe)
server.RegisterServerServer(grpcServe,servers.NewHelloServices())
listen,e := net.Listen("tcp","127.0.0.1:8080")
if e != nil{
log.Fatal(e)
}
grpcServe.Serve(listen)
}
启动服务要注册反射服务,否则报错
Failed to list services: server does not support the reflection API
go run main.go
3、安装grpcurl
go get github.com/fullstorydev/grpcurl
go install github.com/fullstorydev/grpcurl/cmd/grpcurl
4、查询服务列表
-> % grpcurl -plaintext 127.0.0.1:8080 list
grpc.reflection.v1alpha.ServerReflection
server.Server
5、查询服务提供的方法
-> % grpcurl -plaintext 127.0.0.1:8080 list server.Server
server.Server.Hello
6、查看更详细的描述
-> % grpcurl -plaintext 127.0.0.1:8080 describe server.Server
server.Server is a service:
service Server {
rpc Hello ( .server.HelloReq ) returns ( .server.HelloResp );
}
7、获取类型信息
-> % grpcurl -plaintext 127.0.0.1:8080 describe .server.HelloReq
server.HelloReq is a message:
message HelloReq {
string name = 1;
}
8、调用接口
-> % grpcurl -plaintext -d '{"name":"grpcurl"}' 127.0.0.1:8080 server.Server/Hello
{
"return": "hello"
}
9、参数解析
-plaintext :在使用grpcurl时,需要通过-cert和-key参数设置公钥和私钥文件,链接启用了tls协议的服务。对于没有没用tls协议的grpc服务,通过-plaintext参数忽略tls证书的验证过程。如果是Unix Socket协议,则需要指定-unix参数。
-d :指定参数,如果为@则是从标准输出输入
·10、标准输入输入参数
-> % grpcurl -vv -plaintext -d @ 127.0.0.1:8080 server.Server/Hello <<EOM
heredoc> {"name":"name"}
heredoc> EOM
Resolved method descriptor:
rpc Hello ( .server.HelloReq ) returns ( .server.HelloResp );
Request metadata to send:
(empty)
Response headers received:
content-type: application/grpc
Estimated response size: 7 bytes
Response contents:
{
"return": "hello"
}
Response trailers received:
(empty)
Sent 1 request and received 1 response
要跟上<<EOM 字符串模式
12、grpc其他参数
https://github.com/fullstorydev/grpcurl