文档: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.

  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "google.golang.org/grpc"
  6. "google.golang.org/grpc/reflection"
  7. pb "greeter/proto"
  8. "log"
  9. "net"
  10. )
  11. type GreetServiceServer struct {
  12. }
  13. func (s *GreetServiceServer) SayHello(ctx context.Context, in *pb.SayHelloReq) (*pb.SayHelloRsp, error) {
  14. log.Println("SayHi begin...")
  15. resp := "Hello: " + in.Name
  16. return &pb.SayHelloRsp{Response: resp}, nil
  17. }
  18. func main() {
  19. lis, err := net.Listen("tcp", fmt.Sprintf("%s:%d", "127.0.0.1", 8888))
  20. if err != nil {
  21. log.Fatalf("dail failed: %v", err)
  22. return
  23. }
  24. grpcServer := grpc.NewServer()
  25. pb.RegisterGreetServiceServer(grpcServer, &GreetServiceServer{})
  26. // 注册 grpcurl 的 reflection 服务
  27. reflection.Register(grpcServer)
  28. log.Println("gRPC server is running...")
  29. grpcServer.Serve(lis)
  30. }

grpcurl

注册reflection 服务关键功能就是能用grpcurl调用服务

安装

go get github.com/fullstorydev/grpcurl/cmd/grpcurl
grpcurl 对于其它 grpc 服务的感知皆来自 reflection 服务,所以在注册自己的服务之前需要先注册 reflection 服务,否则会提示:
image.png

使用

查询服务列表
image.png

查询服务提供的方法
image.png

查看更详细的描述
image.png

获取参数详细信息
image.png

调用服务方法
image.png