RPC 协议配置速查
新建内部服务应该配置什么协议?
- 默认路线: 使用 Thrift IDL 和普通请求响应;需要业务异常与元信息时,明确选择 TTHeader;
- 配置位置: Client 设置传输协议,两端添加匹配的 MetaHandler;完整组装见 用户服务实战;
- 升级检查: v0.13.0 起 Thrift 默认 Framed,旧版默认 PurePayload;不要用默认值代替双方约定;
已有服务要求其他协议时怎样选择?
| 对端要求 | Client 配置或动作 | 注意事项 |
|---|---|---|
| TTHeader | WithTransportProtocol(transport.TTHeader) | 业务异常还需双方 MetaHandler |
| Apache Thrift Framed | transport.Framed | 确认双方 IDL 和异常契约一致 |
| Thrift Buffered | transport.PurePayload | 不携带 TTHeader 元信息 |
| TTHeaderFramed | transport.TTHeaderFramed | 按对端配置匹配 |
| 标准 gRPC | transport.GRPC | 普通 proto3 默认并不等于 gRPC |
| Kitex Protobuf | 使用对应生成桩 | 编码为 Protobuf 不代表兼容 gRPC |
联调时为什么不能只核对 IDL?
- IDL: 定义方法、字段与生成类型;
- 序列化: 将业务数据编码为字节;Thrift Binary、Protobuf 是不同编码;
- 传输: 为消息提供边界与元信息;编码相同但外层协议不同仍可能无法调用;
- 排错: 先对齐 IDL、服务地址与传输配置,再看 工具与排障;
- 按需深入: 不需要先学习信封字段、SeqID、Magic、Header/Trailer 或 Hessian2,遇到互通要求再查官方协议文档;