Метод 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";