所以这个例子就是:
我有Message类型。它在服务器A - >之间传递。 B - > C 现在让我们假设创建了具有几个新字段/ ID的Message 2.0版本。 服务器A和C知道这种新格式,但服务器B仍在使用旧格式。 所有服务器都反序列化,检查,序列化和发送消息。 假设A填充所有字段(Message的V1.0和V2.0),C会看到Message V2.0的填充字段吗?
我知道协议缓冲区支持这一点。我想知道Thrift是否也支持它。 (在我用C#进行的快速测试中,答案是没有,但只想与大家核实)
作为消息代码的一个例子,这里是IDL:
struct Message { // V1.0
1: i64 Id;
}
struct Message { // V2.0
1: i64 Id;
2: string Content;
}
服务器C是否会看到在A?
中填充的Message.Content答案 0 :(得分:1)
答案是否。
关于协议缓冲区,同样重要的是要注意,根据文档,生成的代码的Python版本不支持此功能。
https://developers.google.com/protocol-buffers/docs/encoding#order - “如果消息包含未知字段,则当前Java和C ++实现在按顺序排序的已知字段之后以任意顺序写入它们。当前的Python实现不会跟踪未知字段。”