【问题标题】:Protobuf message / enum type rename and wire compatibility?Protobuf 消息/枚举类型重命名和连线兼容性?
【发布时间】:2020-03-07 03:36:05
【问题描述】:

是否(实际上)可以在不中断通信的情况下更改 protobuf message type (or enum) 的类型名称?

很明显,使用 代码 需要修改以重新编译。问题是使用相同结构但旧名称的旧客户端是否会继续工作?

示例,基于真实文件:

test.proto:

syntax = "proto3";
package test;
// ...

message TestMsgA {

  message TestMsgB { // should be called TestMsgZZZ going forward
    // ...
    enum TestMsgBEnum { // should be called TestMsgZZZEnum going forward
    // ...
    }

    TestMsgBEnum foo = 1;
    // ...
  }

  repeated TestMsgB bar = 1;
  // ...
}

如果类型或枚举名称发生变化,protobuf 有效负载的在线格式是否会发生任何变化?

【问题讨论】:

    标签: protocol-buffers proto3


    【解决方案1】:

    如果您在谈论二进制格式,那么不:名称无关紧要,不会影响您加载数据的能力;对于枚举,只有整数值存储在有效负载中。对于字段,仅存储字段编号。

    显然,如果您交换两个名称,可能会发生混淆,但是:只要结构匹配,它就应该加载。

    如果您谈论的是 JSON 格式,那么它可能很重要。

    【讨论】:

    • “可能有问题”,你的意思是说 proto3 JsonParser 可能会受到影响,或者只是消息的 json-serialized 形式会有所不同?
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多