使用GRPC时,我们需要通过协议缓冲区编译器(protoc)或使用Gradle或Maven protoc构建插件从.proto服务定义中生成gRPC客户端和服务器接口。

Flow now: protobuf file -> java code -> gRPC client.


那么,有什么方法可以跳过这一步吗?

如何创建一个通用的GRPC客户端,可以直接从protobuf文件中调用服务器而无需编译成Java代码?
还是有一种在运行时生成代码的方法?

Flow expect: protobuf file -> gRPC client.


我想用输入的是protobuf文件以及方法,程序包,消息请求的描述来构建通用gRPC客户端系统,而不必为每个protobuf再次编译。

非常感谢你。

最佳答案

从技术上讲,两者都是可能的。

代码生成器只是生成了少数类。主要是protobuf消息,grpc方法描述符和存根。您可以实现它或签入生成的代码以绕过代码生成器。我不确定执行此操作有什么好处。另外,如果更改原型,也将非常烦人。

只要您签入某些接口/抽象类来表示那些生成的桩/方法描述符和protobuf消息,也可以使用字节码生成器动态地执行此操作。您必须确保那些非动态代码与原型定义保持同步(很可能是运行时检查/异常)。

10-01 14:42
查看更多