Метод Protobuf RPC Service без параметров
Я пытаюсь описать службу RPC с помощью буферов протокола Google
service WhoamiService {
rpc WhoAreYou() returns (Whoami) {}
}
message Whoami {
optional bytes request_id = 1;
optional string hostname = 2;
optional string message = 3;
}
Когда я пытаюсь скомпилировать это определение, я получаю сообщение об ошибке Expected type name
, указывающее на фрагмент WhoAreYou()
.
Он отлично работает, если заменить WhoAreYou()
на WhoAreYou(Whoami)
, но в этом случае для метода не нужны какие-либо параметры. Есть ли способ сделать это или он просто не поддерживается?
Ответы
Ответ 1
Вы должны указать тип ввода. Если вы не хотите, чтобы метод принимал какие-либо параметры, укажите пустой тип сообщения, например:
message WhoAreYouParams {}
Причина, по которой это требуется, заключается в том, что если вам нужно будет добавить необязательный параметр, вы можете сделать это, не нарушая существующий код.
Ответ 2
Вы можете указать google.protobuf.Empty
вместо своего собственного пустого сообщения. Пример:
rpc WhoAreYou(google.protobuf.Empty) returns (Whoami) {
}
Не забудьте импортировать соответствующий файл прото:
import "google/protobuf/empty.proto";