问题描述
问题描述
我们在不同的存储库中有两个代码。一个是Java,另一个是C++。我们共享一个共同的protobuf。问题是,在我们这边,也就是 C++ 方面,我们的成员比 JAVA 方面少。如您所见,在我们的 work
上分配了 id
4
,而在 Java 端分配了 id
5
。两个成员的名字相同,这是工作。
问题
如果 protobufs 没有对齐,我们会遇到什么问题? protobufs 不对齐可以吗?
message CPPContext {
optional string date = 1;
optional string time = 2;
optional string hour = 3;
optional string work = 4;
}
message JAVAContext {
optional string date = 1;
optional string time = 2;
optional string hour = 3;
optional string currency = 4;
optional string work = 5;
}
解决方法
Protobuf 根据字段编号而非字段名称对消息进行序列化和反序列化。
例如,如果 CPPContext
消息在另一端反序列化为 JAVAContext
,那么您的 work
字段在另一端将被视为 currency
字段。
最好在通信双方使用相同的 proto 文件。或者至少(向后)兼容的 proto 文件。例如,可以先在 proto 文件中的一侧添加具有新字段 ID 的新可选字段(它们将在另一侧被忽略),但更改字段的 id 或删除必填字段就不行。