宝藏好物gRPCurl
宝物简介
grpcur是一个与grpc服务器交互的命令行工具,可认为是gRPC的curl
工具。
grpcurl用于从命令行调用gRPC服务器支持的RPC方法,gRPC使用二进制编码(protobuf), 不能利用常规的curl工具(早期的curl版本还不支持HTTP/2)。
-
grpcurl工具接受json编码的消息(对人类和脚本更友好), 工具底层会转化为protobuf与服务器交互。
-
grpcurl 必须了解服务的Protobuf协议(服务的schema),才能调用它们, grpcurl通过三种方式之一实现此目的。
- gRPC服务器添加gRPC反射
- 直接读取proto源文件
- 加载编译后的protoset文件(包含已被编码的proto描述文件)
grpcurl命令结构
grpc --flag address command(list/describe) symbol -- flag: tls/plaintext 请求参数 -- address : host:port -- command list/describe -- symbol: 具体服务名/请求参数 grpc --plaintext -d @"{message:"hello"}" localhost:5000 greet.Greeter
特性
gRPCurl是有gRPC上去创建的命令行工具,功能包括:
- 调用grpc服务,包括流式服务
- 使用[grpc反射]进行服务发现
- 列出并描述 grpc服务
- 支持调用安全(TLS)或者不安全(plain-text)的gRPC服务, 针对TLS有大量配置
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(); } }); }
golang 添加grpc反射
- 添加 google.golang.org/grpc/reflection pkg
- 添加注册反射的代码
s := grpc.NewServer() pb.RegisterGreeterService(s, &pb.GreeterService{SayHello: sayHello}) + // Register reflection service on gRPC server. + reflection.Register(s) if err := s.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) }
服务发现、服务调用
grpcurl list/describe 可以列出gRPC服务端反射的protobuf
- grpcurl localhost:5001 list
如果grpc服务不带 TLS, 则grpcurl --plaintext localhost:5000 list
greet.Greeter grpc.reflection.v1alpha.ServerReflection
- 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 localhost:5001 describe greet.HelloRequest, 会给出hellorequest的pb结构。
grpc -d ( Data for request contents) 传参调用gRPC方法
- grpcurl -d {"name":"World"} localhost:5001 greet.Greeter/SayHello
{ "message": "Hello World" }
gRPCui
gRPCui 是 gRPC 的交互式 Web UI,基于gRPCurl,并提供一个GUI来发现和测试 gRPC 服务,类似于 Postman 或 Swagger UI 等 HTTP 工具。
- 安装: go install github.com/fullstorydev/grpcui/cmd/grpcui@latest
- 使用: grpcui localhost:5001 , 同样的,服务不带TLS, 加上 --plaintext
会立刻打开类Swagger窗口:
输入Request Header、Request Data,自行倒腾。
就是这么神奇!
以上是利用gRPC服务反射,获取protobuf的方式,grcpurl还支持直接读取protobuf文件。
`grpcurl -import-path ../protos -proto greet.proto -d {\"name\":\"World\"} localhost:5001 greet.Greeter/SayHello`
本文来自博客园,作者:{有态度的马甲},转载请注明原文链接:https://www.cnblogs.com/JulianHuang/p/15594268.html
欢迎关注我的原创技术、职场公众号, 加好友谈天说地,一起进化
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?