文档:https://pkg.go.dev/google.golang.org/grpc@v1.36.0/reflection
reflection implements server reflection service.
The service implemented is defined in: https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1alpha/reflection.proto.
package main
import (
"context"
"fmt"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
pb "greeter/proto"
"log"
"net"
)
type GreetServiceServer struct {
}
func (s *GreetServiceServer) SayHello(ctx context.Context, in *pb.SayHelloReq) (*pb.SayHelloRsp, error) {
log.Println("SayHi begin...")
resp := "Hello: " + in.Name
return &pb.SayHelloRsp{Response: resp}, nil
}
func main() {
lis, err := net.Listen("tcp", fmt.Sprintf("%s:%d", "127.0.0.1", 8888))
if err != nil {
log.Fatalf("dail failed: %v", err)
return
}
grpcServer := grpc.NewServer()
pb.RegisterGreetServiceServer(grpcServer, &GreetServiceServer{})
// 注册 grpcurl 的 reflection 服务
reflection.Register(grpcServer)
log.Println("gRPC server is running...")
grpcServer.Serve(lis)
}
grpcurl
注册reflection 服务关键功能就是能用grpcurl调用服务
安装
go get github.com/fullstorydev/grpcurl/cmd/grpcurl
grpcurl 对于其它 grpc 服务的感知皆来自 reflection 服务,所以在注册自己的服务之前需要先注册 reflection 服务,否则会提示:
使用
查询服务列表
查询服务提供的方法
查看更详细的描述
获取参数详细信息
调用服务方法