gRPC服务能否直接将其他gRPC服务的响应作为请求参数?
关于gRPC服务间复用消息类型的问题
完全可以直接将MethodAResponse作为ServiceB中MethodB的请求参数,不需要额外创建MethodBRequest来包裹它。
原因说明
gRPC基于Protocol Buffers,所有消息类型(比如MethodAResponse)都是独立的protobuf定义,只要在定义ServiceB的proto文件中正确引入包含MethodAResponse的文件(通过import语句),就可以直接复用该消息类型作为其他服务方法的请求或响应。
示例写法
假设ServiceA的定义在service_a.proto中,ServiceB的proto文件可以这么写:
import "service_a.proto"; // Service definition for ServiceB service ServiceB { rpc MethodB(MethodAResponse) returns (MethodBResponse); } // 定义ServiceB的响应消息 message MethodBResponse { string result = 1; // 其他自定义字段 }
额外说明
如果后续你需要给MethodB的请求添加额外字段,这时候再创建MethodBRequest来包裹MethodAResponse会更灵活,但如果当前需求只是直接用MethodAResponse的内容作为请求,直接复用是完全合规且高效的做法。
内容的提问来源于stack exchange,提问作者eriee
相关产品推荐
相关产品推荐

