带有初始参数的gRPC客户端流



我正在创建客户端流方法,该方法的原型文件定义应该看起来像这样:

service DataService {
rpc Send(stream SendRequest) returns (SendResponse) {}
}

message SendRequest {
string id = 1;
bytes data = 2;
}

message SendResponse {
}

这里的问题是ID与每个流消息一起发送,即使它只需要一次。对于这样的用例,您的建议和最优方法是什么?一种简单的方法是在第一条消息中只设置一次ID,然后将其留空。但是这个API应该被第三方使用,而上面的方法定义并没有很好地解释这一点。我也不认为这样的东西是被支持的:

service DataService {
rpc Send(InitialSendRequest, stream DataOnlyRequest) returns (SendResponse) {}
}

我目前正在考虑SendRequest消息是这样的,但是必须检查与考虑原型封送处理的第一种情况相比,这是多么的最佳:

message SendRequest {
oneof request{
string id = 1;
bytes data = 2;
}
}

您使用oneof的方法,其字段明确记录说id仅在流上的第一条消息中被期望,并且如果在流上的后续消息中设置了id,服务器实现将终止流,这对我来说听起来不错。

下面是上述模式在grpc-lb-v1中的用法。尽管grpc团队正在远离grpc-lb-v1,但上面提到的模式是一种常用的模式。

我不太确定它对原型编组的含义。这可能是protobuf团队的一个问题。

希望对你有帮助。

相关内容

  • 没有找到相关文章

最新更新