【发布时间】:2021-09-28 21:41:44
【问题描述】:
我有一个使用这些方法的 proto3 gRPC 服务:
syntax = "proto3";
Service MyService
{
rpc Foo (FooRequest) returns (FooResponse) {}
rpc Bar (BarRequest) returns (BarResponse) {}
// etc.
}
我想在我的 C++ 应用程序中动态访问这些方法,例如
google::protobuf::ServiceDescriptor serviceDescriptor;
google::protobuf::MethodDescriptor* myMethod = serviceDescriptor.FindMethodByName("Foo");
使用google::protobuf::MessageDescriptor = myMessage.GetDescriptor(); 获取消息描述符很简单,但似乎没有对服务等效的方法。
如何为 C++ 中的服务获取 ServiceDescriptor?
我的直觉是,获取 gRPC 方法列表需要获取 ServiceDescriptor,但如果有其他方法可以实现这一点,我也会感兴趣。
【问题讨论】:
-
是的
ServiceDescriptor让您获得MethodDescriptors但您需要从根FileDescriptor(?) 开始。我没有在 Java 中做过这个,但是 Golang('s new Protobuf) SDK 有一个有用的protoreflect模块,我曾经做过类似的事情。请参阅:pkg.go.dev/google.golang.org/protobuf/reflect/…。似乎有一个 Java 等价物:javadoc.io/static/io.grpc/grpc-services/1.15.1/io/grpc/protobuf/…
标签: c++ protocol-buffers grpc proto3 grpc-c++