Protocol buffers Protobuf消息/枚举类型重命名和连线兼容性? 是否(实际上)可以在不中断通信的情况下更改a的类型名称?

Protocol buffers Protobuf消息/枚举类型重命名和连线兼容性? 是否(实际上)可以在不中断通信的情况下更改a的类型名称?,protocol-buffers,proto3,Protocol Buffers,Proto3,显然,需要调整使用代码以重新编译。问题是,使用相同结构但使用旧名称的旧客户端是否会继续工作 例如,基于真实文件: test.proto: syntax = "proto3"; package test; // ... message TestMsgA { message TestMsgB { // should be called TestMsgZZZ going forward // ... enum TestMsgBEnum { // should be called

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

例如,基于真实文件:

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有效负载的在线格式是否会发生任何变化?

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

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


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

使用“可能很重要”,您的意思是说proto3可能会受到影响,还是说消息的JSON序列化形式会有所不同?