没有参数的 Protobuf RPC 服务方法
Protobuf RPC Service method without parameters
我正在尝试使用 Google 的 Protocol Buffers
描述 RPC 服务
service WhoamiService {
rpc WhoAreYou() returns (Whoami) {}
}
message Whoami {
optional bytes request_id = 1;
optional string hostname = 2;
optional string message = 3;
}
当我尝试编译这个定义时,我得到一个指向 WhoAreYou()
片段的错误 Expected type name
。
如果我将 WhoAreYou()
替换为 WhoAreYou(Whoami)
,它工作正常,但在这种情况下,该方法不需要任何参数。有没有办法做到这一点,或者它根本不被支持?
您必须指定输入类型。如果您不希望该方法采用任何参数,请定义一个空消息类型,例如:
message WhoAreYouParams {}
之所以需要这样做,是因为如果您以后需要添加一个可选参数,您可以在不破坏现有代码的情况下这样做。
您可以指定 google.protobuf.Empty
而不是您自己的空消息。
示例:
rpc WhoAreYou(google.protobuf.Empty) returns (Whoami) {
}
不要忘记导入适当的原型文件:
import "google/protobuf/empty.proto";
我正在尝试使用 Google 的 Protocol Buffers
描述 RPC 服务service WhoamiService {
rpc WhoAreYou() returns (Whoami) {}
}
message Whoami {
optional bytes request_id = 1;
optional string hostname = 2;
optional string message = 3;
}
当我尝试编译这个定义时,我得到一个指向 WhoAreYou()
片段的错误 Expected type name
。
如果我将 WhoAreYou()
替换为 WhoAreYou(Whoami)
,它工作正常,但在这种情况下,该方法不需要任何参数。有没有办法做到这一点,或者它根本不被支持?
您必须指定输入类型。如果您不希望该方法采用任何参数,请定义一个空消息类型,例如:
message WhoAreYouParams {}
之所以需要这样做,是因为如果您以后需要添加一个可选参数,您可以在不破坏现有代码的情况下这样做。
您可以指定 google.protobuf.Empty
而不是您自己的空消息。
示例:
rpc WhoAreYou(google.protobuf.Empty) returns (Whoami) {
}
不要忘记导入适当的原型文件:
import "google/protobuf/empty.proto";