注意:所有这些都与协议缓冲区版本3有关.

让我们说,我们有一个信息

message Foo {
  int32 weight_in_lbs;
}

此消息的制作者希望停止生产以磅为单位的重量,而希望以公斤为单位生产它.

因此,我们不推荐使用lbs字段,而添加了kgs字段.

message Foo {
  int32 weight_in_lbs [deprecated = true];
  int32 weight_in_kgs;
}

正在分发的生产者(多台服务器)不能一下子升级.因此,在某一时刻,我们将让生产者生产新旧消息类型的消息.

理想情况下,消费者应该同时 Select weight_in_lbsweight_in_kgs,如果有的话,更喜欢后者,否则就求助于前者.但是在Proto3中,不可能判断某个字段是否真的没有设置,或者实际上是由生产者设置为缺省值.documentation人推荐以下两种之一:

  1. 将该字段包装在一条消息中,这样我们就可以使用HasField()
  2. 将该字段标记为可选(他们说不建议这样做)

这些选项中哪一个更可取?有没有第三种 Select ?在我的编程模式中,使用者try 阅读新旧字段并从中进行 Select ,这是不是有问题?

推荐答案

在这种情况下,您没有任何问题:0公斤等于0磅.但是,如果温度范围是华氏度和摄氏度,确实需要一种方法来区分存在.

如果你想同时在生产者和消费者身上进行过渡,在新领域使用optional似乎是合理的.

另一种 Select 是等待所有生产者都被更新以设置这两个字段,然后才开始更改消费者以使用新的字段.

Python相关问答推荐

为什么使用SciPy中的Distance. cos函数比直接执行其Python代码更快?

是否有方法将现有的X-Y图转换为X-Y-Y1图(以重新填充)?

带有pandas的分区列上的过滤器的多个条件read_parquet

如何在vercel中指定Python运行时版本?

如何将Matplotlib的fig.add_axes本地坐标与我的坐标关联起来?

从今天起的future 12个月内使用Python迭代

将HTML输出转换为表格中的问题

LAB中的增强数组

比较两个二元组列表,NP.isin

根据另一列中的nan重置值后重新加权Pandas列

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

如何使用它?

Pre—Commit MyPy无法禁用非错误消息

无法在Docker内部运行Python的Matlab SDK模块,但本地没有问题

SQLAlchemy bindparam在mssql上失败(但在mysql上工作)

如何在Python中获取`Genericums`超级类型?

如何从需要点击/切换的网页中提取表格?

可以bcrypts AES—256 GCM加密损坏ZIP文件吗?

如何使用使用来自其他列的值的公式更新一个rabrame列?

在Admin中显示从ManyToMany通过模型的筛选结果