用途:gRPC Concepts 是一份围绕 gRPC 的知识整理,用于理解基于 Protocol Buffers 与 HTTP/2 的 RPC 通信方式,触发关键词包括 gRPC、protobuf、Protocol Buffers、RPC、streaming、service definition。
主要能力:
- 概念与特性:gRPC 为二进制协议、使用 HTTP/2 传输、支持双向流、语言无关、强类型;适用微服务通信、实时数据流、移动端与后端通信、IoT 设备通信。
- Protocol Buffers:用 proto3 语法定义 message、enum 与字段编号;字段编号 1-15 单字节编码,16-2047 双字节编码,19000-19999 由 protobuf 保留,编号一旦分配不可更改;建议保留已删除字段编号。
- 服务与 RPC 类型:用 service 定义 Unary(单请求单响应)、Server streaming(stream 返回)、Client streaming(stream 请求)、Bi-directional streaming(双向流),分别适用于 CRUD、大结果集与实时更新、文件上传与批处理、聊天与实时协作。
- 错误处理:给出 OK、CANCELLED、UNKNOWN、INVALID_ARGUMENT、DEADLINE_EXCEEDED、NOT_FOUND 等状态码,以及 BadRequest、RetryInfo 等富错误详情。
- Metadata 与拦截器:标准元数据含 :authority、:path、content-type、user-agent、grpc-timeout;自定义元数据如 authorization、x-request-id、x-tenant-id;客户端拦截器负责加令牌、日志、错误处理与链路上下文,服务端拦截器负责鉴权、限流、日志与链路提取。
- 最佳实践:proto 设计使用描述性字段名、保留废弃编号、用 well-known 类型、枚举以 UNSPECIFIED=0 起始、可空字段用 optional;性能上复用 channel/stub、大数据用流、设置合理 deadline、启用压缩;版本上可新增字段,不可删除或重命名字段、改字段类型或编号。
- 对比:gRPC 走 HTTP/2、二进制 Protobuf、.proto 强契约、原生流,浏览器需 grpc-web,工具较少;REST 走 HTTP/1.1 或 2、JSON 文本、契约较弱、流支持有限、浏览器原生支持、工具丰富。
使用方式与限制:资料为概念说明,未提供安装命令、代码运行步骤或具体实现教程;相关技能提及 grpc-spring 与 apigen-architecture。