gRPCurl简介
gRPCurl[1]是一个与gRPC服务器交互的命令行工具,可认为是gRPC的curl
工具。
gRPCurl用于从命令行调用gRPC服务器支持的RPC方法,gRPC使用二进制编码(protobuf), 不能利用常规的curl工具(早期的curl版本还不支持HTTP/2)。
1. gRPCurl工具接受json编码的消息(对人类和脚本更友好), 工具底层会转化为protobuf与服务器交互。
2.gRPCurl 必须了解服务的Protobuf协议(服务的schema),才能调用它们, gRPCurl通过三种方式之一实现此目的
• gRPC服务器添加gRPC反射
• 直接读取proto源文件
• 加载编译后的protoset文件 (包含已被编码的proto描述文件)
gRPCurl特性
gRPCurl是由gRPC社区创建的命令行工具,功能包括:
•调用gRPC服务,包括流式服务
•使用gRPC反射进行服务发现
•列出并描述 gRPC服务
•支持调用安全(TLS)或者不安全(plain-text)的gRPC服务
ASP.NET Core设置grpc反射
•添加Grpc.AspNetCore.Server.Reflection包引用•Startup.cs注册反射
public void ConfigureServices(IServiceCollection services) { services.AddGrpc(); services.AddGrpcReflection(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapGrpcService<GreeterService>(); if (env.IsDevelopment()) { endpoints.MapGrpcReflectionService(); } }); }
服务发现、服务调用
grpcurl list/describe 可以列出gRPC服务端反射的protobuf
1. grpcurl localhost:5001 list
greet.Greeter grpc.reflection.v1alpha.ServerReflection
2. grpcurl localhost:5001 describe
greet.Greeter is a service: service Greeter { rpc SayHello ( .greet.HelloRequest ) returns ( .greet.HelloReply ); } grpc.reflection.v1alpha.ServerReflection is a service: service ServerReflection { rpc ServerReflectionInfo ( stream .grpc.reflection.v1alpha.ServerReflectionRequest ) returns ( stream .grpc.reflection.v1alpha.ServerReflectionResponse ); }
grpc -d ( Data for request contents) 传参调用gRPC方法
3. grpcurl -d {"name":"World"} localhost:5001 greet.Greeter/SayHello
{ "message": "Hello World"}
gRPCui
gRPCui[2] 是 gRPC 的交互式 Web UI,基于gRPCurl,并提供一个GUI来发现和测试 gRPC 服务,类似于 Postman 或 Swagger UI 等 HTTP 工具。
•安装:go install github.com/fullstorydev/grpcui/cmd/grpcui@latest
•使用:grpcui localhost:5001
会立刻打开类Swagger窗口:
输入Request Header、Request Data,自行倒腾。
就是这么神奇!
以上是利用gRPC服务反射获取protobuf的方式,gRPCurl还支持直接读取proto文件。
`grpcurl -import-path ../protos -proto greet.proto -d {\"name\":\"World\"} localhost:5001 gree