У меня есть служба gRPC proto3 со следующими методами:
syntax = "proto3";
Service MyService
{
rpc Foo (FooRequest) returns (FooResponse) {}
rpc Bar (BarRequest) returns (BarResponse) {}
// etc.
}
Я хотел бы получить динамический доступ к этим методам в моем приложении на С++, например.
google::protobuf::ServiceDescriptor serviceDescriptor;
google::protobuf::MethodDescriptor* myMethod = serviceDescriptor.FindMethodByName("Foo");
Получить дескриптор сообщения с помощью google::protobuf::MessageDescriptor = myMessage.GetDescriptor();
несложно, но похоже, что для службы нет эквивалентного метода.
Как получить ServiceDescriptor
для службы на C++?
Мне кажется, что для получения списка методов gRPC требуется получить ServiceDescriptor
, но если есть другой способ сделать это, мне было бы также интересно.
ServiceDescriptor
дает вамMethodDescriptors
, но вам нужно начать с корняFileDescriptor
(?). Я не делал этого на Java, но Golang (новый Protobuf) SDK имеет полезный модульprotoreflect
, который я использовал для подобных целей. См.: pkg.go.dev/google.golang.org/ протобуф/отражать/. Кажется, существует эквивалент Java: javadoc.io/static/io.grpc/grpc-services/1.15.1/io/grpc/protobuf/ - person DazWilkin   schedule 22.07.2021