gPRC (protobuf) 可以返回空消息吗?

Can gPRC (protobuf) return a null message?

提问人:lightrek 提问时间:5/22/2022 更新时间:5/22/2022 访问量:2928

问:

我们的客户端调用一个 gRPC 服务器,理想情况下,该服务器应该返回一个 MyMessage 响应对象。

但是这个 MyMessage 对象可以为 null 吗?或者 gRPC 无法返回 null 对象,因为如果它为 null,grpc 会抛出异常?

null 协议缓冲区 grpc-java

评论


答:

2赞 J.F. 5/22/2022 #1

回答您的问题,请查看这些 Google 文档,其中说:

请注意,除非另有说明,否则任何 Java 协议缓冲区方法都不会接受或返回 null。

所以似乎 gRPC 不能返回 null。顺便说一句,您可以查看 google.protobuf.emptyJava 参考

你可以像这样定义你的原型:

import "google/protobuf/empty.proto";

service SomeService {
    rpc SomeOperation (google.protobuf.Empty) returns (google.protobuf.Empty) {}
}

评论

0赞 lightrek 5/22/2022
谢谢@J.F.但是,如果服务器关闭或服务器出现一些问题/错误,那么在这些情况下,rpc 响应是否可以为 null?
2赞 J.F. 5/22/2022
据我所知,如果服务器出现故障,它会返回响应代码。检查此链接。“如果发生错误,gRPC 将返回其错误状态代码之一”。如果服务器关闭,则客户端会由于超时响应(称为截止时间,更多信息)而生成错误“默认情况下,此截止时间是一个非常大的数字,取决于语言实现”。