#grpcurl 是一个命令行工具,用于与 gRPC 服务交互,类似于 curl 但专门用于 gRPC。
安装
# 使用 Go 安装
go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest
# 使用 brew(macOS)
brew install grpcurl
# 使用 apt(Ubuntu/Debian)
sudo apt install grpcurl
基本语法
grpcurl -plaintext -import-path . -import-path third_party -proto api/feature/v1/feature.proto -d ‘{“project”:”reader_free_all”, “name”: “scene-test”}’ localhost:50050 Feature/GetSceneWithFeatureSchemaByName
grpcurl [选项]
常用选项
-
-proto
: 指定 proto 文件 -
-import-path
: 指定 proto 文件的导入路径 -
-d : 指定请求数据(JSON 格式)
-
-plaintext: 使用明文连接(不使用 TLS)
-
-H <header>: 添加请求头
-
-v: 显示详细输出
-
-insecure: 跳过 TLS 证书验证
-
-reflect: 使用服务器反射(如果服务支持)
基本使用示例
1. 列出服务
bash
Apply to middleware.g…
Run
# 使用反射列出所有服务
grpcurl -plaintext localhost:8080 list
# 使用 proto 文件列出服务
grpcurl -proto api/mserve.proto -import-path . list
2. 列出方法
# 列出特定服务的方法
grpcurl -plaintext localhost:8080 list your.service.Name
# 使用 proto 文件
grpcurl -proto api/mserve.proto -import-path . list your.service.Name
3. 查看方法描述
# 查看方法的详细信息
grpcurl -plaintext localhost:8080 describe your.service.Name.MethodName
# 使用 proto 文件
grpcurl -proto api/mserve.proto -import-path . describe your.service.Name.MethodName
4. 发送请求
# 发送 JSON 数据
grpcurl -plaintext -d ’{“field”: ”value”}’ localhost:8080 your.service.Name/MethodName
# 从文件读取数据
grpcurl -plaintext -d @request.json localhost:8080 your.service.Name/MethodName
# 使用 proto 文件
grpcurl -proto api/mserve.proto -import-path . -plaintext -d ’{“field”: ”value”}’ localhost:8080 your.service.Name/MethodName
针对你的项目的示例
根据你的项目结构,可能的使用方式:
1. 使用 mserve.proto
# 列出 mserve 服务的方法
grpcurl -proto api/mserve.proto -import-path . list
# 调用预测服务
grpcurl -proto api/mserve.proto -import-path . -plaintext -d ’{
”model”: {“name”: ”your_model”},
”context”: {“scene”: ”your_scene”},
”items”: [{“id”: ”item1”}]
}’ localhost:8080 mserve.PredictorService/Predict
2. 使用 featuredump.proto
# 特征转储相关操作
grpcurl -proto api/featuredump.proto -import-path . -plaintext -d ’{
”feature_group”: ”your_group”,
”scene”: ”your_scene”
}’ localhost:8080 featuredump.FeatureDumpService/DumpFeature
实用技巧
1. 使用环境变量
export GRPC_SERVER=”localhost:8080”
export GRPC_OPTS=”-proto api/mserve.proto -import-path . -plaintext”
grpcurl $GRPC_OPTS -d ’{“field”: ”value”}’ $GRPC_SERVER service/method
2. 调试模式
# 显示详细的请求和响应信息
grpcurl -v -plaintext -d ’{“field”: ”value”}’ localhost:8080 service/method
3. 添加请求头
# 添加认证头或其他元数据
grpcurl -H ”Authorization: Bearer token” -plaintext -d ’{“field”: ”value”}’ localhost:8080 service/method
4. 流式请求
# 对于流式 gRPC 方法
echo ’{“field”: ”value1”}’ | grpcurl -plaintext -d @ localhost:8080 service/StreamMethod |
常见问题
-
连接拒绝: 确保 gRPC 服务正在运行,端口正确
-
方法不存在: 检查服务和方法名称是否正确
-
proto 文件问题: 确保 proto 文件路径和导入路径正确
-
TLS 错误: 对于本地开发,通常需要添加 -plaintext 选项
这样你就可以使用 grpcurl 来测试和调试你的 gRPC 服务了!