宝藏好物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上去创建的命令行工具,功能包括:
- 调用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
- grpcurl localhost:5001 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 -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
会立刻打开类Swagger窗口:

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

就是这么神奇!
以上是利用gRPC服务反射,获取protobuf的方式,grcpurl还支持直接读取protobuf文件。
`grpcurl -import-path ../protos -proto greet.proto -d {\"name\":\"World\"} localhost:5001 greet.Greeter/SayHello`
宝藏好物gRPCurl的更多相关文章
- C# 8.0 宝藏好物 Async streams
之前写<.NET gRPC 核心功能初体验>,利用gRPC双向流做了一个打乒乓的Demo,存储消息的对象是IAsyncEnumerable<T>,这个异步可枚举泛型接口支撑了g ...
- C# 8.0 添加和增强的功能【基础篇】
.NET Core 3.x和.NET Standard 2.1支持C# 8.0. 一.Readonly 成员 可将 readonly 修饰符应用于结构的成员,来限制成员为不可修改状态.这比在C# 7. ...
- Python 基礎 - 元組與簡易購物車實做
tuple(元組) 其實跟列表差不多,也是存一組數,只不過是它一旦建立了,就不能修改了,只能做 切片 跟 查詢,所以只叫 只讀列表 語法: name = ("Rogers", &q ...
- 关于蜂窝物联技术 NBIoT 的一些观点
背景 SigFox 开始于2009,这项技术对长期作为标准移动电话交互标准的3GPP造成了有力冲击.SigFox 解决了终端设备互联场景下的多个痛点: 1 过于复杂: 2 昂贵的设备: 3 耗电不持久 ...
- 算法:poj1066 宝藏猎人问题。
package practice; import java.util.Scanner; public class TreasureHunt { public static void main(Stri ...
- 【BZOJ-1924】所驼门王的宝藏 Tarjan缩点(+拓扑排序) + 拓扑图DP
1924: [Sdoi2010]所驼门王的宝藏 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 787 Solved: 318[Submit][Stat ...
- Effective C++ -----条款38:通过复合塑模出has-a或“根据某物实现出”
复合(composition)的意义和public继承完全不同. 在应用域(application domain),复合意味has-a(有一个).在实现域(implementation domain) ...
- 《孙子算经》之"物不知数"题:中国剩余定理
1.<孙子算经>之"物不知数"题 今有物不知其数,三三数之剩二,五五数之剩七,七七数之剩二,问物几何? 2.中国剩余定理 定义: 设 a,b,m 都是整数. 如果 m ...
- zzulioj 1907小火山的宝藏交易(dfs记忆化搜索)
#include <stdio.h> #include <algorithm> #include <string.h> #include <vector> ...
随机推荐
- Spatial Analyst 工具-数学分析
数学分析 # Process: Abs arcpy.gp.Abs_sa("", 输出栅格) # Process: Exp arcpy.gp.Exp_sa("", ...
- Python笔记_1语法总结
前言导读 本章知识点是我在最初期听python视频教程的时候整理总结的笔记 对python语法的认识对以后代码的解读有着很大的帮助. 1 新建python命名规则 新建项目名 :数字编号 项目名称 新 ...
- Kubernetes-Service介绍(三)-Ingress(含最新版安装踩坑实践)
前言 本篇是Kubernetes第十篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战. Kubernetes系列文章: Kubernetes介绍 Kubernetes环境搭建 Kuberne ...
- Fikker 管理平台弱口令
官网:www.fikker.com 应用介绍:Fikker 是一款面向 CDN/站长 的专业级网站缓存(Webcache)和反向代理服务器软件(Reverse Proxy Server). 发现过程: ...
- C++ 与 Visual Studio 2019 和 WSL
Visual Studio 使用 C++ 的 Linux 开发(WSL) https://devblogs.microsoft.com/cppblog/c-with-visual-studio-201 ...
- python在指定一行的下一行插入文本
给定一个程序,程序中有许多函数,比如,funcA,funcB,现在,如何在生成的函数中插入一个logger()语句? 这里用一个solidity程序做例子 pragma solidity ^0.4.0 ...
- JavaScript04
分离绑定事件 使用分离方式绑定元素事件可以使用页面元素与JavaScript代码完全分离,有利于代码分工和维护,是目前开发主流,分为两步: 1.获取需要绑定事件的元素 语法:根据id属性值取元素节点 ...
- mongodb的聚合操作
在mongodb中有时候我们需要对数据进行分析操作,比如一些统计操作,这个时候简单的查询操作(find)就搞不定这些需求,因此就需要使用 聚合框架(aggregation) 来完成.在mongodb ...
- best-time-to-buy-and-sell-stock leetcode C++
Say you have an array for which the i th element is the price of a given stock on day i. If you were ...
- java容器之HashMap
HashMap采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻址修改,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的. 解决哈希冲突的三个方法: a.开放 ...