是否可以在不访问源.proto文件/生成的类的情况下反序列化protobuf消息?我的源系统使用Ruby生成消息并使用Java。源系统可以创建消费者无法轻易了解的新消息格式。或者,消费者访问proto类的最佳方式是什么?是否有可能拥有某种原型存储库?
答案 0 :(得分:1)
如果没有架构(.proto
文件或编译Descriptor
),您只能将Protobuf解码为一系列标签/值对,其中标签是数字且值具有有限的类型信息。这可能足以让人对协议进行反向工程,但通常对代码没用。
可以通过发送FileDescriptorSet
(基本上是相关.proto
文件的编译版本)来发送架构和有效负载,如下所述:
https://developers.google.com/protocol-buffers/docs/techniques#self-description
然而,这并不像听起来那么有用! FileDescriptorSet
将允许您确定字段的名称和类型,但这并不意味着您的代码将知道如何处理它们。
也就是说,有一些可能的用例:
但是,在这些用例中,我通常会建议使用必要的模式预先配置代理或存储系统,而不是每条消息都发送它们,因为模式往往非常大。