宝藏好物gRPCurl

简介: gRPCurl[1]是一个与gRPC服务器交互的命令行工具,可认为是gRPC的curl工具。

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窗口:


cb638a183716a5d53d5015a9b4c3583a.png


输入Request Header、Request Data,自行倒腾。


4a7ebd2fc83d8dcba687b9e2e9fe9623.jpg


就是这么神奇!


以上是利用gRPC服务反射获取protobuf的方式,gRPCurl还支持直接读取proto文件。


`grpcurl  -import-path ../protos   -proto  greet.proto -d {\"name\":\"World\"} localhost:5001 gree
相关文章
|
消息中间件 存储 运维
Rabbitmq消息大量堆积怎么办?
该文讨论了一个系统架构问题,主要涉及RabbitMQ在处理订单消息时遇到的性能瓶颈。首先,系统使用RabbitMQ是为了解耦和提高性能,前端创建订单后通过RabbitMQ发送消息给订单履约系统消费并执行后续操作。当订单流量激增时,消息堆积导致服务器压力增加。 排查解决方案: 1. 增加消费者以提高消费速度,但发现即使增加消费者,消息堆积问题仍未解决。 2. 分析消费者逻辑,发现调用库存系统接口可能导致处理速度慢。库存系统压力大,接口响应慢,加剧问题。 3. 实施清空堆积消息的策略,新建消费者快速消费消息并存储在表中,减轻服务器压力。待库存服务恢复后,再将消息推回RabbitMQ处理。
737 1
|
存储 缓存 负载均衡
图解一致性哈希算法,看这一篇就够了!
近段时间一直在总结分布式系统架构常见的算法。前面我们介绍过布隆过滤器算法。接下来介绍一个非常重要、也非常实用的算法:一致性哈希算法。通过介绍一致性哈希算法的原理并给出了一种实现和实际运用的案例,带大家真正理解一致性哈希算法。
23956 64
图解一致性哈希算法,看这一篇就够了!
|
人工智能 算法 定位技术
[AI aider] 打造终端AI搭档:Aider让编程更智能更有趣!
发现Aider,一个能在终端中与AI搭档编程的工具,让你的编程体验更智能、更有趣。
[AI aider] 打造终端AI搭档:Aider让编程更智能更有趣!
|
存储 前端开发 安全
【面试题】: bs架构与cs架构的区别以及各自优缺点
bs架构与cs架构的区别以及各自优缺点
4706 0
|
存储 Unix C#
【.NET Core】深入理解IO之Path
【.NET Core】深入理解IO之Path
231 2
|
负载均衡 网络协议 安全
【计网·湖科大·思科】实验七 路由信息协议RIP、开放最短路径优先协议OSPF、边界网关协议BGP
【计网·湖科大·思科】实验七 路由信息协议RIP、开放最短路径优先协议OSPF、边界网关协议BGP
553 2
|
存储 安全 测试技术
数据库怎么评测
数据库怎么评测
268 8
|
中间件 开发者
史上最详细的Gin中间件使用教程
1.概述 Gin框架允许开发者在处理请求的过程中,加入用户自己的钩子(Hook)函数。这个钩子函数就叫中间件,中间件适合处理一些公共的业务逻辑,比如登录认证、权限校验、数据分页、记录日志、耗时统计等。
1404 84
史上最详细的Gin中间件使用教程
|
JavaScript Ubuntu Java
零基础开发 nginx 模块
推荐学习资料: * nginx 开发指南: http://nginx.org/en/docs/dev/development_guide.html * nginx 动态模块编译博客文章: https://www.nginx.com/blog/compiling-dynamic-modules-nginx-plus/ * nginx 源码: https://github.com/nginx
4957 1
|
消息中间件 Java RocketMQ
修改rocketmq的日志文件位置
修改rocketmq的日志文件位置
419 0
修改rocketmq的日志文件位置