是否可以更改(追加,合并等)序列化的protobuf
消息,而无需先解组?我正在使用golang/protobuf package。
理想情况下,我希望有一个服务可以接收传入的序列化消息,即时附加一些字段,然后将消息传递给下一个类似中间件的服务 - 其中可以添加其他信息有效载荷,而不必经常解组和编组。
某些上下文:系统是实时的,所以我希望尽可能减少开销。
答案 0 :(得分:1)
来自documentation on protocol buffers:
如您所知,协议缓冲区消息是一系列键值对。消息的二进制版本只使用字段的数字作为密钥 - 每个字段的名称和声明的类型只能通过引用消息类型的定义(即.proto文件)在解码端确定。
对消息进行编码时,键和值将连接成字节流。在解码消息时,解析器需要能够跳过它无法识别的字段。这样,可以将新字段添加到消息中,而不会破坏不了解它们的旧程序。为此,有线格式消息中每对的“键”实际上是两个值 - 来自.proto文件的字段编号,以及提供足够信息以查找以下值的长度的线型。 / p>
因此,要将字段附加到编码的协议缓冲区消息,您只需将编码字段附加到字节流/切片的末尾。