如何发送在运行时确定格式的gRPC消息?

时间:2018-09-17 13:11:42

标签: java grpc

我主要对用Java做到这一点感兴趣,但是查看任何语言的解决方案都会有所帮助。

根据各种文档,我正在阅读gRPC的默认工作流程是

  • 写一个.proto文件
  • 从该文件生成客户端和/或服务器代码
  • 编写程序并将其与生成的代码一起编译

我想做的是以编程方式(从.proto文件或通过其他方式)读取消息架构,然后将根据该架构布局的一些数据发送到某个地址。

我现在看到的唯一方法是外壳,在临时目录中生成代码,调用编译器,加载编译后的代码,并使用反射来获得预期的功能。

对我来说,这听起来像是一个极端的骇客。有没有更简单的选择?

1 个答案:

答案 0 :(得分:1)

在gRPC Java中,生成的代码和原型是可选的,您实际上并不需要它们(尽管它们很方便)。要动态解释消息,您需要定义自己的Marshaller,该JSON with gRPCInputStream一起使用以访问原始消息字节。从这里可以将它们缓冲到一个数组中,并决定如何解析它们。

作为类似的练习,我编写了关于使用https://github.com/GoogleCloudPlatform/google-cloud-php-firestore的更深入的教程。该原理应与您的代码相同。